【Mysql】外部キー制約を無効化する方法
【Mysql】外部キー制約を無効化する方法
Mysql でテーブルやデータを削除する時に外部キーのせいで簡単に出来ない時がそれを解決するために外部キー制約を無効化する方法
外部キー制約を無効化
以下のコマンドを使用すると外部キーチェックを無効化ができます。
-- 外部キーチェックの無効化
SET FOREIGN_KEY_CHECKS = 0;
-- 処理
-- TODO
-- 外部キーチェックを有効化
SET FOREIGN_KEY_CHECKS = 1;
サンプル
実際に使用してみるためのサンプルです。 サンプルとして使用するテーブル。
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
エラーになるパターン
child テーブルから parent テーブルへの外部キーがついているのでエラーが発生する。
DROP TABLE parent;
エラーが発生します。
SQLSTATE[HY000]: General error: 1824 Cannot drop table 'parent' referenced by a foreign key constraint 'child_ibfk_1' on table 'child'.
エラー内容は「外部キーが付いてるから削除ができない」です。 Error number: 3730; Symbol: ER_FK_CANNOT_DROP_PARENT; SQLSTATE: HY000
外部キーチェックを無効化する
以下のように、一時的に外部キーチェックを無効化することによって削除が可能です。
-- 外部キーチェックの無効化
SET FOREIGN_KEY_CHECKS = 0;
-- 処理
DROP TABLE parent;
-- 外部キーチェックを有効化
SET FOREIGN_KEY_CHECKS = 1;