一尘不染

触发器,断言和检查之间有什么区别(在数据库中)

sql

任何人都可以解释(或建议一个站点或论文)触发器,断言和检查之间的确切区别,也描述我应该在哪里使用它们吗?

编辑:我的意思是在数据库中,而不是在任何其他系统或编程语言中。


阅读 433

收藏
2021-03-17

共1个答案

一尘不染

触发器
-触发器是在数据库中更新,插入或删除之前或之后执行的一条SQL。用简单的英语触发的示例可能类似于:在更新客户记录之前,保存当前记录的副本。看起来像这样:

CREATE TRIGGER triggerName
AFTER UPDATE
    INSERT INTO CustomerLog (blah, blah, blah)
    SELECT blah, blah, blah FROM deleted

断言和检查之间的区别更加模糊,许多数据库甚至不支持断言。

检查约束 -检查是一条SQL,可确保在对记录采取操作之前满足条件。用简单的英语来说就是这样:所有客户的帐户余额必须至少为100美元。看起来像这样:

ALTER TABLE accounts 
ADD CONSTRAINT CK_minimumBalance
CHECK (balance >= 100)

任何试图在余额列中插入小于100的值的操作都会引发错误。

断言 -断言是一段SQL,可确保满足条件或停止对 数据库对象 采取的 操作 。这可能意味着锁定整个表甚至整个数据库。

更令人困惑的是,可以使用触发器来强制执行检查约束,并且在某些DB中可以代替断言(通过允许您运行与要修改的表无关的代码)。对于初学者来说,常见的错误是在需要触发器时使用检查约束,或者在需要检查约束时使用触发器。

例如:所有新开户的客户都必须有100美元的余额;但是,一旦开户,其余额可能会低于该金额。在这种情况下,您必须使用触发器,因为您只希望在插入新记录时评估条件。

2021-03-17