繁体   English   中英

MySQL - ON更新CASCADE + foreign_key_checks = 0

[英]MySQL - ON update CASCADE + foreign_key_checks = 0

我正在开发一个工具来合并具有相同模式但不同数据的两个数据库。

部分原因是将所有外键更改为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没有解决这个问题:(

您应该首先修复参照完整性。

  1. 如果关系是合成类型,则删除孤立行
  2. 否则将fk字段更新为null

之后,您的操作将正常运行。

附加信息:

如果NOT NULL ,则表示关系为1 *。 在这种情况下,您必须在父表中添加一个虚拟行(例如,“VIRTUAL PARENT”行),并将指向未显存父项的所有fks更新到此表。 这将允许您稍后继续数据,并且还可以轻松地检索它们。

如果您认为1 *不是必需的(0 *对于您的技术/应用层来说已足够),那么只需将列设置为可为空即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM