更新時および削除時の外部キーオプション。各フィールド[制限、カスケード、ヌル設定、アクションなし]は何をしますか?
あなたが一つずつ取る場合:
更新と削除の両方について:
親行を更新/削除しようとすると:
制限:子行がある場合、何も削除されません
カスケード:子行も削除/更新されます
Set Null:親を削除すると、子列はnullに設定されます
アクションなし:子行は削除/更新の問題になりません
外部キーを含むテーブルは参照または子テーブルと呼ばれ、候補キーを含むテーブルは参照または親テーブルと呼ばれます。
NULLの設定:親テーブル行を削除するときに、列の値を[〜#〜] null [〜#〜]に設定します。
[〜#〜] cascade [〜#〜]:CASCADEは、親が変更されたときに変更を伝播します。行を削除すると、その行を参照する制約されたテーブルの行も削除されますなど。
[〜#〜] restrict [〜#〜]:RESTRICTは、親行の値を参照する子行が存在する場合、特定の親行を削除できません。
NO ACTION:NO ACTIONとRESTRICTは非常に似ています。参照されたテーブルでUPDATEまたはDELETEステートメントが実行されると、DBMSはステートメント実行の最後で、参照関係が違反でないことを確認します。短い子行では、親行削除または更新の場合は関係ありません。
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