【问题标题】:Delete Value with Relational Table Trigger vs使用关系表触发器删除值 vs
【发布时间】:2013-08-30 04:13:20
【问题描述】:

如何使用关系数据库删除已连接表的值。

电影数据库示例: 电影表 -> Movie_has_Genre 表 -> 流派表

如果我删除一部电影,我想删除 Movie_has_Genre 表中外键与电影表中的 id 相同的所有行。

我应该在电影表上使用触发器(在删除时...在关系表上执行删除)还是有其他内置函数来处理这个问题?

我只是模糊地记得有另一种方法可以做到这一点,但不记得它叫什么。

【问题讨论】:

    标签: sql sql-server triggers


    【解决方案1】:

    您使用级联删除语句。它的语法如下所示:

    ALTER TABLE dbo.T2
       ADD CONSTRAINT FK_T1_T2_Cascade
       FOREIGN KEY (keyId) REFERENCES dbo.T1(keyId) ON DELETE CASCADE
    

    完整的语法是:here

    【讨论】:

    • 在删除级联时有时会导致意外删除。我喜欢执行两个查询 - 首先从子表中删除(最好是停用)数据,然后从父表中删除(或停用)数据。
    • 请随意在您的回答中使用我的建议。您已经想出了一个简明扼要的答案。
    【解决方案2】:

    SQL Server 中有一个选项可以通过 CASCADE 设置自动执行此操作,如图所示。

    这是一个非常方便的选项,但请确保不要将其应用于所有具有外键引用的表,因为它可能会导致意外的数据丢失。确保彻底分析天气,这不会造成任何损害。

    另一种选择是从首先引用的表开始使用多个删除语句。

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多