# mysql foreign 外部キーチェック無効化で database 削除

データーベース削除しようと思ったら foreign 外部キーが邪魔で delete 削除あるいは update 更新できませんとのエラーが出ました。

# Cannot delete or update a parent row: a foreign key constraint fails


 

mysql> drop database test_database;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

# FOREIGN_KEY_CHECKS 使う

外部キー関係を持つテーブルを削除するには、foreign_key_checks を 0 に設定する無効化が必要

 





mysql> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> drop database test_database;
Query OK, 3 rows affected (0.04 sec)

無事削除できた

# foreign_key_checks を 0 に設定することの注意

外部キーに関して正しく順序付けられていないテーブルがダンプファイルに含まれている場合でも、そのテーブルを任意の順序でインポートできます。また、インポート操作も高速化されます。foreign_key_checks を 0 に設定することは、LOAD DATA および ALTER TABLE 操作中に外部キー制約を無視するためにも役立つ場合があります。ただし、foreign_key_checks = 0 の場合でも、MySQL では、カラムが一致しないカラム型を参照している外部キー制約の作成は許可されません。また、テーブルに外部キー制約が存在する場合は、ALTER TABLE を使用して、そのテーブルを別のストレージエンジンを使用するように変更することはできません。ストレージエンジンを変更するには、まず外部キー制約をすべて削除する必要があります。

SET foreign_key_checks = 0 を実行しないかぎり、FOREIGN KEY 制約によって参照されるテーブルに対して DROP TABLE を発行できません。テーブルを削除すると、そのテーブルを作成するために使用されたステートメントで定義されていた制約もすべて削除されます。

MySQL リファレンスマニュアル 外部キーおよびその他の MySQL ステートメント (opens new window)による

2021-01-16
  • mysql