大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【MySQL】外部キー制約があるテーブルorデータの削除

※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。

【目次】

 

背景

 開発環境で変更したデータベースが本番環境には反映されていなかったので、本番環境のMySQLを直接変更することにしました。

 

内容

実行内容

・カラム削除

・テーブル削除

・テーブル内の全データを一括削除

 

カラム・テーブルの削除

カラムを削除しようとするとエラーが出ました。

ERROR 1025 (HY000): Error on rename of '・・・' to '・・・' (errno: 150)

 

どうやら外部キー制約が邪魔をしているみたいです。

外部キーの定義を解除して、カラムを削除します。

 

外部キーの値を確認する。

mysql> show create table tablename;

・・・
mysql> CONSTRAINT `TABLE_FK1(外部キーの値)` FOREIGN KEY (`column_id`) REFERENCES `column` (`id`),
・・・

 

外部キー制約を解除する。

mysql> ALTER TABLE rent_houses DROP FOREIGN KEYTABLE_FK1(外部キーの値);

 

 解除すると、カラムもテーブルも削除できるようになっているはずです。 

mysql> ALTER TABLE rent_houses DROP column_id;
mysql> drop table tablename;

 

データを一括削除

外部キー制約があるテーブルのデータを一括削除します。

こちらは外部キー制約を一時無効にしてから、データを削除します。

 

外部キー制約を一時無効 → データ削除 → 外部キー制約を有効

mysql> set foreign_key_checks = 0;
mysql> truncate table table_name;
mysql> set foreign_key_checks = 1;

 

【余談】データを挿入

$ heroku run rails db:seed

 

今後に向けて

 マイグレーションしても本番環境のデータベースに反映されない問題が発生してます・・・

 

先に開発環境の方を完成させるかどうか悩み中。