将外键添加到引用另一个表的现有表时,确保引用的行是至关重要的存在于父表中。否则,可能会出现“无法添加或更新子行:外键约束失败”错误。
在提供的情况下,您尝试在引用的 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中文网其他相关文章!