別のテーブルを参照する既存のテーブルに外部キーを追加する場合、参照される行が親テーブルに存在します。そうしないと、「子行を追加または更新できません: 外部キー制約が失敗します」エラーが発生する可能性があります。
指定されたケースでは、参照するsourcecodes_tagsテーブルに外部キー(sourcecode_id)を追加しようとしています。ソースコードテーブル。ただし、SHOW CREATE TABLE クエリによると、sourcecodes テーブルを参照するsourcecodes_tags テーブルに外部キーが定義されていないようです。
エラー メッセージは、外部キー違反があることを示しています。つまり、sourcecode_id の一部がsourcecodes_tags テーブルの値は、sourcecodes テーブルには存在しません。この問題を解決するには、それらの孤立したレコードを特定して削除する必要があります。
孤立したレコードの特定
sourcecode テーブルに存在しない sourcecode_id 値を見つけるには、次のクエリを使用できます:
SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL;
このクエリは、次の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 sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE;
以上がMySQL での「Foreign Key Constraint Fails」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。