如何更新一个既是主键又是另一张表的外键的主键?

16 浏览
0 Comments

如何更新一个既是主键又是另一张表的外键的主键?

我有一个表tableA,其中有一个列myID。myID是tableA中的主键,并且是tableB的外键。

当我尝试更新tableA中一个特定记录的myID时:

update tableA
set myID = 123456
where myID= 999999

我遇到了这个错误:

UPDATE语句与FOREIGN KEY约束“tableA_FK00”冲突。冲突发生在数据库“mydatabase”中的表“tableA”的列'myID'。

我已将myID的更新规则设置为“级联”,并且禁用了外键约束,但我仍然无法更新。我应该如何继续?

0
0 Comments

如何在主键也是另一张表的外键的情况下更新主键?

有时候我们需要更新一个表的主键,但是这个主键同时也是另一张表的外键。这时候就需要注意一些步骤,以确保更新的顺利进行。

以下是一些处理方法:

步骤如下:

1. 暂时禁用外键约束(ALTER TABLE tableA WITH NOCHECK CONSTRAINT ALL)。

2. 更新主键。

3. 更新外键以匹配主键的更改。

4. 重新启用外键约束。

通过以上步骤,我们可以成功更新同时也是外键的主键。

0
0 Comments

当一个表B的记录引用了表A的主键123456,并且表B是具有“tableA_FK00”约束的表时,就违反了约束。如果你必须更改表A中的主键(我不确定为什么要这样做,主键不应该变化!),那么你需要确保没有其他记录通过外键约束引用它。

因此,如果坚持要在表A中更改主键:

  1. 找到具有“tableA_FK00”约束的表(确保只有表B,参见此处的帖子)。
  2. 暂时删除表B中的约束
  3. 更新表A
  4. 更新所有需要更改外键的表B中的行
  5. 重新应用表B的外键约束

另一个选择方法:

  1. 将具有外键123456的表B的所有行的ID插入到一个临时表中(该表只包含来自表B的主键的键)
  2. 将表B的外键字段设置为允许为空
  3. 通过与临时表在表B的主键上进行连接,将表B中的所有字段设为null
  4. 更改表A中的行
  5. 通过与临时表进行连接,将表B中的所有行设置为999999。
0