代码之家  ›  专栏  ›  技术社区  ›  derek

sql用外键更新表

sql
  •  5
  • derek  · 技术社区  · 16 年前

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

    当我尝试对任意一个表进行更新时,会得到一个“update语句与引用约束冲突…”,引用外键约束。

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

    5 回复  |  直到 16 年前
        1
  •  9
  •   KM.    16 年前

    如果要执行一次修复,请删除约束,更新,然后重新添加约束。

    如果需要作为应用程序的一部分执行此操作,请插入一个类别行,更新子类别行,然后删除原始类别行。

        2
  •  5
  •   D'Arcy Rittich    16 年前

    您需要删除约束,更新值,然后重新添加约束。

        3
  •  2
  •   Kevin LaBranche    16 年前

    您必须首先禁用约束,执行更新,然后再次启用约束。

    看看这个 article 通过odetocode讨论这个。

        4
  •  2
  •   Mark Byers    16 年前

    你可以把你的约束改成 ON UPDATE CASCADE .

        5
  •  2
  •   Philip Kelley    16 年前

    我总是担心禁用约束,而你 真正地 如果这是一个普通的手术就不想这么做。

    一个公认的丑陋的选择是: -基于要更新但包含新外键值的行,在父表中创建一行 -用新值更新外键包含旧值的所有子行。 -删除现在未使用的父键行

    这有很多明显的原因,可能不适合您的实现,但它在数据库中保持了引用的完整性。