【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
今後に向けて
マイグレーションしても本番環境のデータベースに反映されない問題が発生してます・・・
先に開発環境の方を完成させるかどうか悩み中。