我有一个类别表,其中一个字段用作子类别表的外键。作为每个表的主键一部分的一个字段是语言ID。我需要在两个表中更新这些。基本上,无论两个表中的语言id = x,我都需要将其设置为y。
当我尝试对任一个表进行更新时,我得到一个'与UPFER条件冲突的UPDATE语句..',它引用了外键约束。
如何更新这两个表的语言字段?
答案 0 :(得分:9)
如果您正在进行一次修复,请删除约束,UPDATE,然后再添加约束。
如果您需要在应用程序中执行此操作,请插入一个类别行,更新子类别行,然后删除原始类别行。
答案 1 :(得分:5)
您需要删除约束,更新值,然后重新添加约束。
答案 2 :(得分:2)
您必须先禁用约束,执行更新,然后再次启用约束。
OdeToCode讨论此问题,请查看此article。
答案 3 :(得分:2)
您可以将约束更改为ON UPDATE CASCADE
。
答案 4 :(得分:2)
我总是对禁用约束感到不满,如果这是一种常见的操作,真的不希望这样做。
一个公认的丑陋替代方案是: - 根据要更新但包含新外键值的行在父表中创建一行 - 使用新值更新外键包含旧值的所有子行。 - 删除现在未使用的父键行
由于任何显而易见的原因,这很尴尬,可能不适合您的实现,但它维护数据库中的引用完整性。
答案 5 :(得分:0)
使用此功能,无需删除和添加。
ALTER TABLE Table_Name
NOCHECK CONSTRAINT FoerignKey_Name
--update query here
ALTER TABLE Table_Name
CHECK CONSTRAINT FoerignKey_Name