代码之家  ›  专栏  ›  技术社区  ›  Brad Leach

在删除记录之前检查规则冲突

  •  4
  • Brad Leach  · 技术社区  · 15 年前

    如何检查要运行的删除是否违反外键约束?

    请注意,还有一个类似的问题 here

    2 回复  |  直到 7 年前
        1
  •  3
  •   John Sansom    15 年前

    与Ed Harpers解决方案类似,我还建议您使用一个而不是DELETE触发器。然而,我们的解决方案不同之处在于,我建议您实际配置数据库以强制执行所需的完整性检查/规则。

    或者,如果没有冲突发生,删除操作将简单地成功完成。

    此实现确保DBMS处理管理数据库完整性的全部责任,这当然应该是所需的场景。

    有道理?

        2
  •  1
  •   Ed Harper    15 年前

    你可以用一个 INSTEAD OF DELETE 在目标表上触发以运行select语句,以便在执行delete(如果未找到)之前检查FK冲突。这将使您能够封装数据库中的所有逻辑,尽管如果有大量删除、大型数据集或许多外键,性能可能会有问题。如果您觉得这是一个不可接受的维护问题,那么可以编写使用数据库元数据动态构建必要查询的通用代码,而不是手工编写所有内容。

    另一个可能更简单的选项是对所有删除执行软删除,然后包括一个计划维护任务,该任务将所有可以安全删除的软删除转换为硬删除。根据数据集的大小和删除次数,不执行计划的硬删除可能是可以接受的。

    编辑

    John Sansom的答案是更好地实现触发器解决方案。

    推荐文章