No.214


【MySQL】外部キーの制約を無視してテーブルを削除する

foreign key が多すぎてテーブルが消せないよママン…

 リレーショナルデーターベースの鬼子。ERD(ER図)を書くときにわかりやすくなるのでつける人が多いだろう。

 確かにこれがあることで制約が守られて健全な構造になるというのは分かるんだけど、その関係性を(あたりまえだけど)常に保つためとにかくメンテナンスし辛くなる。
 特に開発初期にテーブル構造を頻繁に作り替えるときなどはdrop tableもままならない状態に陥って、ついdrop databaseしてしまうこともしばしばだろう。
 …だよね?

 というわけで、MySQLで制約を無視してテーブルを削除できるコマンドをメモ。


対応方法

 MySQLのステートメントを利用すると制御をON・OFFできる。

外部キーおよびその他のMySQLステートメント

 使うステートメントは以下。

FOREIGN_KEY_CHECKS

 制約を無効にするときは

SET FOREIGN_KEY_CHECKS = 0;

 この状態で各テーブルの依存関係なしにデーブルの削除ができる。

 制約を有効にするとき(デフォルトに戻すとき)は

SET FOREIGN_KEY_CHECKS = 1;

 とすればOK。