解释一下断言(assertion)
断言是数据库中一种更具一般性的约束机制,任何对断言中有涉及的关系进行操作都会触发断言的检查,如果断言结果不为真,则该操作会被拒绝执行。
举一个生活中的例子:小A是一家之主,月初他定下了一个小目标“这个月家里的开销要限制在一万元以内”。然后每次他和他妻子花钱的时候都会触发小A的这一句断言,然后进行检查,如果某笔消费使这句话变成假的,则不会进行这笔消费。
PS:有的SQL实现中并没有断言机制,比如MySQL。
PS:断言对于系统性能的影响很大,特别是在断言逻辑复杂的情况下。
解释一下触发器(trigger)
触发器是用户定义在关系表上一类由事件所驱动的特殊过程(procedre)。触发器可以做到和断言以及约束类似的效果,但是相比起断言,触发器更加注重达成或不达成条件后的处理。
若某SQL语句对一张表格进行操作时触发了多个触发器,则会按照
1.执行BEFORE类型的触发器
2.执行触发触发器的SQL语句
3.执行AFTER类型的触发器
为顺序执行。另外,如果有多个同类型(比如多个BEFORE类型的触发器)的触发器被同时触发,一般认为会按照触发器的创建时间为顺序,先创建的先被执行。