[英]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
沒有解決這個問題:(
您應該首先修復參照完整性。
之后,您的操作將正常運行。
附加信息:
如果NOT NULL
,則表示關系為1 *。 在這種情況下,您必須在父表中添加一個虛擬行(例如,“VIRTUAL PARENT”行),並將指向未顯存父項的所有fks更新到此表。 這將允許您稍后繼續數據,並且還可以輕松地檢索它們。
如果您認為1 *不是必需的(0 *對於您的技術/應用層來說已足夠),那么只需將列設置為可為空即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.