80

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 は絶対に使用しないでください。

これは多かれ少なかれ正しいですか?

4

1 に答える 1

105

はい、正しいです:

NO ACTION : [...] InnoDB は、親テーブルの削除または更新操作を拒否します。

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

どうやらNO ACTIONRESTRICTは同義語です。ON DELETE / UPDATEさらに、句がない場合は常に使用されるため、これがデフォルトの動作です。

SET NULL : 親テーブルから行を削除または更新し、子テーブルの外部キー列を NULL に設定します。[...]

外部カラムは、NOT NULL として宣言されていない場合 (または InnoDB が削除または更新を許可しない場合)、NULL に設定されます。

CASCADE : 親テーブルから行を削除または更新し、子テーブル内の一致する行を自動的に削除または更新します。[...]

Cascade は、外部列を削除 (または更新) します。

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

したがって、基本的にそのオプションは使用できません。

于 2009-09-30T13:11:40.347 に答える