Cannot add or update a child row: a foreign key constraint fails
MySQLで外部キー制約違反が発生した場合のエラー
概要
Cannot add or update a child row: a foreign key constraint fails は、外部キー制約に違反するデータを挿入・更新しようとした場合に発生します。参照先のレコードが存在しない場合に発生します。
エラーメッセージ
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`database`.`orders`, CONSTRAINT `orders_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails
原因
1. 参照先のレコードが存在しない
| |
2. 参照されているレコードを削除
| |
3. データ型の不一致
| |
解決策
1. 参照先のデータを先に挿入
| |
2. ON DELETE CASCADEを設定
| |
3. ON DELETE SET NULLを設定
| |
4. 一時的に外部キーチェックを無効化
| |
5. 削除順序を守る
| |
外部キー制約の確認
| |
ON DELETE/UPDATE オプション
| オプション | 動作 |
|---|---|
| RESTRICT | 削除/更新を禁止(デフォルト) |
| CASCADE | 子レコードも削除/更新 |
| SET NULL | 子の外部キーをNULLに設定 |
| SET DEFAULT | 子の外部キーをデフォルト値に設定 |
| NO ACTION | RESTRICTと同じ |
フレームワークでの対処
Laravel
| |
Django
| |
Sequelize
| |
デバッグ
| |
関連エラー
関連エラー
MySQL の他のエラー
この記事は役に立ちましたか?