sie*_*iej 5 mysql database foreign-keys foreign-key-relationship sql-update
我正在开发一个工具来合并两个具有相同架构但不同数据的数据库。
其中一部分是将所有外键更改为ON UPDATE CASCADE,然后递增所有主键以避免冲突并保持外键指针正常工作。
我的问题是,有时会有一些 FK 损坏的孤立行,因此以下查询:
UPDATE table set pk = pk + 1000000
Run Code Online (Sandbox Code Playgroud)
像这样失败:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails...(尽管我什至没有考虑触摸外键列!)
我想通过以下方式关闭它:
Set foreign_key_checks=0
Run Code Online (Sandbox Code Playgroud)
但随后相关的外键不会更新。我做了一个快速测试,设置foreign_key_checks = 0后级联不起作用。
有没有办法触发级联,或者在不设置的情况下执行 FK 损坏的行的更新foreign_key_checks=0?UPDATE IGNORE没有解决这个问题:(
您应该首先修复引用完整性。
之后您的操作就会正常进行。
附加信息:
如果列是NOT NULL,则意味着关系是 1*。在这种情况下,您必须在父表中添加虚拟行(例如“VIRTUAL PARENT”行)并将指向不存在父级的所有 fks 更新为该行。这将使您以后可以继续处理数据并轻松检索它们。
如果您认为 1* 不是必需的(0* 对于您的技术/应用层来说就足够了),那么只需将该列设置为可为空即可。