將外鍵加到引用另一個表的現有表時,請確保引用的行是至關重要的存在於父表中。否則,可能會出現「無法新增或更新子行:外鍵約束失敗」錯誤。
在提供的情況下,您嘗試在引用的 sourcecodes_tags 表中新增外鍵 (sourcecode_id)原始碼表。但是,根據您的 SHOW CREATE TABLE 查詢,引用 sourcecodes 表的 sourcecodes_tags 表上似乎沒有定義外鍵。
錯誤訊息表示有外鍵衝突,這表示某些 sourcecode_id sourcecodes_tags 表中的值在 sourcecodes 表中不存在。要解決此問題,您需要識別並刪除這些孤立記錄。
識別孤立記錄
要查找源代碼表中不存在的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中的「外鍵約束失敗」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!