##はじめに
mysqlにてテーブル削除をしようとした際に、「ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails ~」エラーが発生したので、その解決法を記しておきます。
結論としては、外部キー制約を一時的に無効にすることで削除できるようになりました。
mysqlのバージョン5.7.34
##対処法
エラーに遭遇して、解決までの流れを記載していきます。
まずはmysqlにアクセス。
$ mysql -u root -p
次に接続するデータベースを参照して、切り替え。
mysql> show databases;
mysql> use データベース名;
そしてテーブルを参照して、中身を見る。
mysql> show tables;
select * from テーブル名;
次にテーブルを削除しようとすると、表題のエラーが…。
mysql> delete from テーブル名;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`データベース名`.`posts`, CONSTRAINT `fk_rails_5b5ddfd518` FOREIGN KEY (`user_id`) REFERENCES `テーブル名` (`id`))
このエラーは、親行を削除もしくは更新できず外部キー制約に失敗しているという内容です。
このエラーに対して、以下コマンドにて外部キー制約を一時的に無効にします。
mysql> SET FOREIGN_KEY_CHECKS = 0;
このコマンドにてOKが出れば、もう一度削除のコマンドを実行します。
mysql> delete from テーブル名;
Query OK, 3 rows affected (0.00 sec)
無事削除できたみたいなので、先ほど無効にした外部キー制約を戻しておきます。
mysql> SET FOREIGN_KEY_CHECKS = 1
あとは「exit;」にてmysqlを抜けて完了です。