2012-09-29 29 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; 

您的更新查询之前。