Error Code:1451外部キー制約が失敗しました
データ更新に以下のSQLを実行しようとすると
delete from products where id not in( select product_id from order_details group by product_id );
次のようなエラーがでました。
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`mydb`.`products_categories`, CONSTRAINT `fk_products_categories_products1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`))
これを翻訳すると
「外部キー制約が失敗しました( `mydb`.products_categories`、CONSTRAINT` fk_products_categories_products1`)FOREIGN KEY( `product_id`)REFERENCES` products`( `id`))」
という内容のもので、親行を削除または更新できない。(外部キー)制約に失敗するというもの
当初は外部キーを調べて実行できる方法がないか調べましたがかなりはまってしまったので、気を取り直し、
違う観点から調べてみると外部キー制約を無効にする方法がありましたので早々実行してみました。
参考にさせて頂いたサイト
【MySQL】一時的に外部キー制約を無効にする - プログラムは、用いる言葉の選択で決まる
下記のコマンドで無効化し、 SET FOREIGN_KEY_CHECKS=0; 必要な処理が終了したら、 SET FOREIGN_KEY_CHECKS=1; これで元に戻す。
ありがとうございました(#^.^#)
外部キー制約を一時的に無効にする
動作確認:
MySQL8.0
MySQLWorkbench8.0
外部キー制約を無効にする
SET FOREIGN_KEY_CHECKS = 0
外部キーを無効して以下のように実行すると
delete from products where id not in( select product_id from order_details group by product_id );
これまたエラー
今度は、1046エラーで データベースが上手く呼び込めてませんでした。
これを以下のように一列に記述し直すと
delete from products where id not in( select product_id from order_details group by product_id );
無事成功!
productテーブルから一度も売り上げのなかったデータが削除されました。
外部キーを無効にしている間Result Gridでデータは表示されますが以下のように文字が重なっていても重なり幅の調整は効きません。
データの操作が終わったら元に戻しましょう
外部キー制約を有効にする
SET FOREIGN_KEY_CHECKS = 1
コメント