如何更新一个既是主键又是另一张表的外键的主键?
当一个表B的记录引用了表A的主键123456,并且表B是具有“tableA_FK00”约束的表时,就违反了约束。如果你必须更改表A中的主键(我不确定为什么要这样做,主键不应该变化!),那么你需要确保没有其他记录通过外键约束引用它。
因此,如果坚持要在表A中更改主键:
- 找到具有“tableA_FK00”约束的表(确保只有表B,参见此处的帖子)。
- 暂时删除表B中的约束
- 更新表A
- 更新所有需要更改外键的表B中的行
- 重新应用表B的外键约束
另一个选择方法:
- 将具有外键123456的表B的所有行的ID插入到一个临时表中(该表只包含来自表B的主键的键)
- 将表B的外键字段设置为允许为空
- 通过与临时表在表B的主键上进行连接,将表B中的所有字段设为null
- 更改表A中的行
- 通过与临时表进行连接,将表B中的所有行设置为999999。