簡體   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