ホームページ >データベース >mysql チュートリアル >MySQL エラー 1452: 外部キー制約の失敗を解決する方法?
Mysql エラー 1452: 外部キー制約により子行の追加または更新が失敗する
sourcecodes_tags テーブルに外部キーを追加しようとしたときソースコード テーブルを参照すると、エラーが発生します:「Mysql エラー」 1452 - 子行を追加または更新できません: 外部キー制約が失敗します。
問題の理解
このエラーは通常、sourcecode_id 値がsourcecodes_tags に存在することを示します。 table は、sourcecodes テーブルに対応する主キー値 (id) として存在しません。 MySQL は参照整合性を強制し、外部キーが親テーブル内の有効な主キーを参照するようにします。
エラーの解決
このエラーを解決するには、特定し、孤立したsourcecode_id値をsourcecodes_tagsテーブルから削除します。次のクエリを実行して、欠落している主キー値を見つけます:
SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL;
このクエリは、sourcecode テーブルに存在しない sourcecode_id 値のリストを返します。識別したら、これらの孤立値は DELETE ステートメントを使用して削除できます:
DELETE FROM sourcecodes_tags WHERE sourcecode_id IN (SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL);
孤立値を削除した後、ALTER TABLE ステートメントを再実行して外部キーを追加します:
ALTER TABLE sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE;
これにより、エラーなしで外部キー制約が正常に作成されるはずです。
以上がMySQL エラー 1452: 外部キー制約の失敗を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。