MySQLを解析しようとしています docs 。彼らはより明確になる可能性があります。彼らが言っていることは、SET NULL、NO ACTION、RESTRICT、CASCADE、およびSET DEFAULTの5つの可能性があるということです。
NO ACTIONとRESTRICTは同じことを行い(FKを壊すDBの変更を防ぎます)、そのことはデフォルトなので、ON DELETE句を省略した場合はNO ACTION(またはRESTRICT-同じこと)と言います。
SET NULLは親行の削除を許可し、FKをNULLに設定します。
CASCADEは子行を削除します。
SET DEFAULTは決して使用しないでください。
これは多かれ少なかれ正しいですか?
はい、正しいです:
NO ACTION:[...] InnoDBは、親テーブルの削除または更新操作を拒否します。
[〜#〜] restrict [〜#〜]:親テーブルの削除または更新操作を拒否します。 RESTRICT(またはNO ACTION)を指定することは、ON DELETEまたはON UPDATE句を省略することと同じです。 [...]
どうやらNO ACTION
とRESTRICT
は同義語です。また、ON DELETE / UPDATE
句がない場合は常に使用されるため、これがデフォルトの動作です。
SET NULL:親テーブルから行を削除または更新し、子テーブルの外部キー列をNULLに設定します。 [...]
NOT NULLとして宣言されていない場合(またはInnoDBは削除または更新を許可しない場合)、外部列はNULLに設定されます。
[〜#〜] cascade [〜#〜]:親テーブルから行を削除または更新し、子テーブル内の一致する行を自動的に削除または更新します。 [...]
カスケードは、外部列を削除(または更新)します。
SET DEFAULT:このアクションはパーサーによって認識されますが、InnoDBはON DELETE SET DEFAULTまたはON UPDATE SET DEFAULT句を含むテーブル定義を拒否します。
したがって、基本的にそのオプションは使用できません。