web-dev-qa-db-ja.com

Mysqlワークベンチの外部キーオプション[制限、カスケード、ヌル設定、アクションなし]、何をしますか?

更新時および削除時の外部キーオプション。各フィールド[制限、カスケード、ヌル設定、アクションなし]は何をしますか?

23
user2310173

あなたが一つずつ取る場合:

更新と削除の両方について:

親行を更新/削除しようとすると:

制限:子行がある場合、何も削除されません

カスケード:子行も削除/更新されます

Set Null:親を削除すると、子列はnullに設定されます

アクションなし:子行は削除/更新の問題になりません

37
Axel Agarrat

外部キーを含むテーブルは参照または子テーブルと呼ばれ、候補キーを含むテーブルは参照または親テーブルと呼ばれます。

NULLの設定:親テーブル行を削除するときに、列の値を[〜#〜] null [〜#〜]に設定します。

[〜#〜] cascade [〜#〜]:CASCADEは、親が変更されたときに変更を伝播します。行を削除すると、その行を参照する制約されたテーブルの行も削除されますなど。

[〜#〜] restrict [〜#〜]:RESTRICTは、親行の値を参照する子行が存在する場合、特定の親行を削除できません。

NO ACTION:NO ACTIONとRESTRICTは非常に似ています。参照されたテーブルでUPDATEまたはDELETEステートメントが実行されると、DBMSはステートメント実行の最後で、参照関係が違反でないことを確認します。短い子行では、親行削除または更新の場合は関係ありません。

23
Jay Patel

UPDATEまたはDELETE操作が、子テーブルに一致する行を持つ親テーブルのキー値に影響を与える場合、結果はFOREIGN KEY句のON UPDATEおよびON DELETE副次句を使用して指定された参照アクションに依存します。 MySQLは、実行するアクションに関して次の5つのオプションをサポートしています。

CASCADE:親テーブルから行を削除または更新し、子テーブル内の一致する行を自動的に削除または更新します。 ON DELETE CASCADEとON UPDATE CASCADEの両方がサポートされています。 2つのテーブル間で、親テーブルまたは子テーブルの同じ列に作用するいくつかのON UPDATE CASCADE句を定義しないでください。

SET NULL:親テーブルから行を削除または更新し、子テーブルの外部キー列をNULLに設定します。 ON DELETE SET NULL句とON UPDATE SET NULL句の両方がサポートされています。

SET NULLアクションを指定する場合、子テーブルの列をNOT NULLとして宣言していないことを確認してください。

RESTRICT:親テーブルの削除または更新操作を拒否します。 RESTRICT(またはNO ACTION)を指定することは、ON DELETEまたはON UPDATE句を省略することと同じです。

NO ACTION:標準SQLのキーワード。 MySQLでは、RESTRICTと同等です。参照されるテーブルに関連する外部キー値がある場合、MySQLサーバーは親テーブルの削除または更新操作を拒否します。一部のデータベースシステムには遅延チェックがあり、NO ACTIONは遅延チェックです。 MySQLでは、外部キー制約はすぐにチェックされるため、NO ACTIONはRESTRICTと同じです。

SET DEFAULT:このアクションはMySQLパーサーによって認識されますが、InnoDBはON DELETE SET DEFAULTまたはON UPDATE SET DEFAULT句を含むテーブル定義を拒否します。

指定されていないON DELETEまたはON UPDATEの場合、デフォルトのアクションは常にRESTRICTです。

上記のテキストからコピー:https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign -keys.html

0
Hemanth