我刚刚发现我的数据库在过去几个月中在几台服务器之间被移动,在其中一个数据库转储中,转换为myisam并且所有外键约束都被破坏(没有留下深刻印象)。我已经用PHP脚本将所有表格转换回innodb,但现在我发现一半的约束无法添加。
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`identicar2`.<result 2 when explaining filename '#sql-2a7_c0'>, CONSTRAINT `#sql-2a7_c0_ibfk_1` FOREIGN KEY (`feature_sk`) REFERENCES `tbl_feature_list` (`feature_sk`))
我现在迷路了,我无法手动浏览数千条记录。为了让我的数据库恢复原状,最好的做法是什么?
如果你愿意,我可以提供表格结构,但我认为任何解决方案都将独立于确切的结构
答案 0 :(得分:1)
最简单的解决方案:(包含丢失您可能想要保留的数据的明显危险)
UPDATE table
SET fkColumn = NULL
WHERE fkColumn NOT IN (SELECT referenceColumn FROM referencedTable)
如果您只想找到它们:
SELECT *
FROM table
WHERE fkColumn NOT IN (SELECT referenceColumn FROM referencedTable)