今日、Navicat for mysql を使用してテーブルを設計すると、外部キーを設定するときに、削除および更新時に 2 つの列で 4 つの値から選択できます: CASCADE、NO ACTION、 RESTRICT、SET NULL、私はすべて自分で試しましたが、違いは次のとおりです:
CASCADE: 親テーブルが削除および更新すると、子テーブルは関連するレコードを削除および更新します;
SET NULL: 親テーブルが削除または更新すると、子テーブルは関連するレコードの外部キー フィールドの列を NULL に設定するため、外部キーは子テーブルの設計時に null 以外に設定することはできません。
子テーブルに親テーブルに関連付けられたレコードがある場合、RESTRICT (制限) により親テーブルの削除が防止されます。 Record
NO ACTION: RESTRICT と同じで、最初に外部キーもチェックします。
Empty、RESTRICT , NO ACTION | 削除: テーブルのレコードが存在しない場合、マスター テーブルを削除できます。スレーブ テーブルが削除されても、マスター テーブルは変更されません。 更新: スレーブ テーブルのレコードが存在しない場合、メイン テーブルのメニューを更新できます。スレーブ テーブルが更新されても、メイン テーブルは変更されません。 |
CASCADE | 削除: マスター テーブルを削除するときに、スレーブ テーブルも自動的に削除します。マスター テーブルを変更せずに、スレーブ テーブルを削除します。 更新: マスター テーブルを更新するときにスレーブ テーブルを自動的に更新します。マスターテーブルを変更せずに、スレーブテーブルを更新します。 |
SET NULL | Delete: マスター テーブルを削除すると、スレーブ テーブルは自動的に NULL に更新され、スレーブ テーブルが削除されても、マスター テーブルは変更されません。 Update: マスター テーブルを更新するときに、スレーブ テーブルの値を NULL に自動的に更新します。マスターテーブルを変更せずに、スレーブテーブルを更新します。 |
理解を助けるための小さな例を次に示します。
(1) データベース ブックショップで、次のように新しいテーブル a を作成しました。
外部キーの設定:# (2) データベース ブックショップで、次のように新しいテーブル b を作成しました。
#(3) 次のようにテーブル a とテーブル b にレコードを挿入します。
ここで、テーブル a の id2 フィールドは外部です。キー フィールドについては、テーブル b の主キーを参照するため、テーブル b が親テーブル、テーブル a が子テーブルとなるため、テーブル a の外部キーを設定するときに、次のように設定します。 4 つの異なる値を使用して、上で述べた結論を導き出します。
以上がMysql 外部キー設定の CASCADE、NO ACTION、RESTRICT、SET NULL とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。