2012-09-29 27 views
2

我有兩個通過外鍵約束鏈接的表。我想換一個ID字段,但下面的代碼外鍵約束失敗原因:MySQL:如何更改具有外鍵約束的字段?

UPDATE A SET id = 1479 WHERE id = 2103; 
UPDATE B SET Aid = 1479 WHERE Aid = 2103; 

我知道我可以設置ON CASCADE自動做到這一點,但我怎麼能做到這一點的情況下,由這種情況下的基礎?

回答

4

通過disabling foreign key checks並通過在事務中運行所有內容。

START TRANSACTION; 
SET FOREIGN_KEY_CHECKS = 0; 
UPDATE A SET id = 1479 WHERE id = 2103; 
UPDATE B SET Aid = 1479 WHERE Aid = 2103; 
SET FOREIGN_KEY_CHECKS = 1; 
COMMIT; 
+0

我想我最好去閱讀交易然後......從來沒有需要使用它們。 –

+0

您不需要該事務,但連接可能會在兩個更新語句之間掉線。那麼你將很難'重建'你的鑰匙;) – Xandl

+0

啊,我明白了。謝謝! –

1

使用

SET FOREIGN_KEY_CHECKS=0; 

您的更新查詢之前。