SQL使用外键更新表

时间:2010-04-19 19:26:00

标签: sql

我有一个类别表,其中一个字段用作子类别表的外键。作为每个表的主键一部分的一个字段是语言ID。我需要在两个表中更新这些。基本上,无论两个表中的语言id = x,我都需要将其设置为y。

当我尝试对任一个表进行更新时,我得到一个'与UPFER条件冲突的UPDATE语句..',它引用了外键约束。

如何更新这两个表的语言字段?

6 个答案:

答案 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

有关更多信息,MSDN链接:https://docs.microsoft.com/en-us/sql/relational-databases/tables/disable-foreign-key-constraints-with-insert-and-update-statements?view=sql-server-ver15