MySQLコマンドやSQL文に関する各種メモ書き

MySQLの外部キー制約

「外部キー制約」はいわゆる『親テーブル - 子テーブル』というテーブル関係において 子テーブルに設定するキー制約です。

MySQLでは以下の条件を満たす時に外部キー制約を設定することができます

・親テーブルと子テーブルが両方InnoDBであること
・子テーブルのキーを設定するカラムと親テーブルの参照するカラムの型が一致していること
・親テーブルの参照するカラムにインデックスが設定されていること

● MySQLの外部キー制約の設定方法

親テーブル: 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 を設定したとき、小テーブルにデータを持たない親テーブル内のデータを削除しようとするとエラーとなります。

No.1161
08/04 15:07

edit