「外部キー制約」はいわゆる『親テーブル - 子テーブル』というテーブル関係において 子テーブルに設定するキー制約です。
MySQLでは以下の条件を満たす時に外部キー制約を設定することができます
・親テーブルと子テーブルが両方InnoDBであること
・子テーブルのキーを設定するカラムと親テーブルの参照するカラムの型が一致していること
・親テーブルの参照するカラムにインデックスが設定されていること
親テーブル: user_table
子テーブル: user_detail_table
紐付けるカラム: user_table.user_id <-> user_detail_table.user_id
ALTER TABLE
user_detail_table
ADD FOREIGN KEY
(user_id)
REFERENCES
user_table(user_id)
ON UPDATE
親テーブル更新時の動作
ON DELETE
親テーブル削除時の動作
;
設定文字列 | 動作 |
---|---|
RESTRICT | エラーを発生させる(デフォルト値) |
NO ACTION | エラーを発生させる(RESTRICTと同じ挙動) |
CASCADE | 親テーブルと同じ処理(値の更新、データの削除)を行う |
SET NULL | 子テーブルにNULLをセットする |
(注意) CASCADE を設定したとき、小テーブルにデータを持たない親テーブルのデータを削除しようとするとエラーとなります。