2013-12-08 48 views
-1

我有一个表,它的主键是5个表中的外键。我需要更改此主键字段的值。什么是查询?更新在一个表中的主键是另一个表中的外键

   Table1 >> fields: tbl1ID(pk, bigint), Desc(nvarchar(50)) 
      Table2 >> fields: tbl2ID(pk, bigint),tbl1ID(fk, bigint), Desc(nvarchar(50)) 
      Table3 >>.... 
      . 
      . 
      . 

我设置tbl1ID = 1,现在我需要改变它像这样tbl1ID = 100001, 但我不能,因为这个领域是关系到另一个表。

是否有可能改变它们全部?

+0

我们需要看到表结构来更好地理解你需要改变以及如何改变这个“主关键字段的价值”。 – cerd

回答

0

您可以通过在您的会话中暂时设置foreign_key_checks = 0来做到这一点。

SET FOREIGN_KEY_CHECKS = 0; 
UPDATE TABLE_A INNER JOIN TABLE_B ON TABLE_B.PKID = TABLE_A.PKID 
SET TABLE_B.PKID = 'NEW_VALUE', TABLE_A.PKID = 'NEW_VALUE' 
WHERE TABLE_A.PKID = 'OLD_VALUE'; 

另一种选择是配置与ON UPDATE CASCADE选项外键,这样,如果主键是父 表更新,它会级联到子表

相关问题