MySQL - ON 更新级联 +foreign_key_checks = 0

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=0UPDATE IGNORE没有解决这个问题:(

Seb*_*bas 1

您应该首先修复引用完整性。

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

之后您的操作就会正常进行。

附加信息:

如果列是NOT NULL,则意味着关系是 1*。在这种情况下,您必须在父表中添加虚拟行(例如“VIRTUAL PARENT”行)并将指向不存在父级的所有 fks 更新为该行。这将使您以后可以继续处理数据并轻松检索它们。

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