我正在开发一个工具来合并两个具有相同模式但数据不同的数据库。
部分原因是将所有外键更改为ON UPDATE CASCADE
,然后递增所有主键以避免冲突并保持外键指针正常工作。
我的问题是,有时候有一些孤立的行,FK坏了,所以请查询:
UPDATE table set pk = pk + 1000000
失败了:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
...
(尽管我甚至都没想过要触摸外键列!)
我想通过以下方式解决这个问题:
Set foreign_key_checks=0
但是相关的外键不会更新。设置foreign_key_checks = 0后,我进行了快速测试并且级联不起作用。
有没有办法触发级联,或者在没有设置foreign_key_checks=0
的情况下执行FK损坏的行更新? UPDATE IGNORE
无法解决此问题:(
答案 0 :(得分:1)
您应该首先修复参照完整性。
之后,您的操作将正常运作。
其他信息:
如果列为NOT NULL
,则表示关系为1 *。在这种情况下,您必须在父表中添加一个虚拟行(例如,“VIRTUAL PARENT”行),并将指向未显存父项的所有fks更新到此表。这将允许您稍后继续数据,并且还可以轻松地检索它们。
如果您认为1 *不是必需的(0 *对于您的技术/应用层来说已足够),那么只需将列设置为可为空即可。