JavaScriptを有効にしてください

【Mysql】外部キー制約を無効化する方法

 ·  ☕ 1 分で読めます

【Mysql】外部キー制約を無効化する方法

Mysql でテーブルやデータを削除する時に外部キーのせいで簡単に出来ない時がそれを解決するために外部キー制約を無効化する方法

外部キー制約を無効化

以下のコマンドを使用すると外部キーチェックを無効化ができます。

1
2
3
4
5
6
7
8
-- 外部キーチェックの無効化
SET FOREIGN_KEY_CHECKS = 0;

-- 処理
-- TODO

-- 外部キーチェックを有効化
SET FOREIGN_KEY_CHECKS = 1;

サンプル

実際に使用してみるためのサンプルです。
サンプルとして使用するテーブル。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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

外部キーチェックを無効化する

以下のように、一時的に外部キーチェックを無効化することによって削除が可能です。

1
2
3
4
5
6
7
8
-- 外部キーチェックの無効化
SET FOREIGN_KEY_CHECKS = 0;

-- 処理
DROP TABLE parent;

-- 外部キーチェックを有効化
SET FOREIGN_KEY_CHECKS = 1;

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer