数据库:如何在删除前检查值?

时间:2015-01-28 15:59:42

标签: database

我有一个包含以下表格的数据库:

表顺序:

  • @id
  • 日期
  • 州(可以有此值('付费','开放))
  • 客户(参考客户(id))

表客户:

  • @id
  • 名称

现在我必须确保我只能删除没有状态为“打开”的订单的客户。

有没有创建触发器的解决方案?但如果不是......触发器必须如何?

1 个答案:

答案 0 :(得分:0)

从数据库一致性的角度来看,您可能不希望删除任何已下订单但未删除订单的客户。如果您允许删除拥有“付款”订单的客户,则您的“订单”表中包含您无法找到客户的记录;这反过来意味着每次查询订单和客户表时,您都需要记住进行外连接。

如果满足以上条件,则可以使用数据库引擎的参照完整性约束来强制执行该规则。

如果上述情况不属实,您实际上可以实施触发器。您没有提到您的RDBMS引擎,因此语法会有所不同,但您需要为客户的“删除”事件创建一个触发器,并检查在订单表中找不到deleted:id,其中status不是“开”。