触发器以及事前触发和事后触发,语句级触发和行级触发

一、触发器概念

触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件(增、删、改)进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。

触发器是在对表进行增、删、改时,自动执行的存储过程。触发器常用于强制业务规则,它是一种高级约束,通过事件进行触发而被执行。

二、触发器分类

SQL Server 包括两种常规类型的触发器:数据操作语言 (DML) 触发器数据定义语言 (DDL) 触发器

当INSERT、UPDATE 或 DELETE 语句修改指定表或视图中的数据时,可以使用 DML 触发器。 DDL 触发器激发存储过程以响应各种 DDL 语句,这些语句主要以CREATE、ALTER 和 DROP 开头。 DDL 触发器可用于管理任务,例如审核和控制数据库操作。

通常说的触发器就是DML触发器。

1、DML触发器分为:

(1) after触发器(事后触发)

    a、 insert触发器
    b、 update触发器
    c、 delete触发器 

(2) instead of 触发器 (事前触发)

注:after触发器要求只有执行某一操作**insert、update、delete之后触发器才被触发,且只能定义在表上。而**instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

2、DDL 触发器使用场合:

(1)要防止对数据库架构进行某些更改。

(2)希望数据库中发生某种情况以响应数据库架构中的更改。

(3)要记录数据库架构中的更改或事件。

三、使用触发器的时机

1、实现主外键关系所不能保证的复杂参照完整性数据的一致性
不过,通过“级联引用完整性约束”可以更有效地执行这些更改。

2、防止恶意或错误的 INSERT、UPDATE 以及 DELETE 操作,并强制执行比 CHECK 约束定义的限制更为复杂的其他限制。
与 CHECK 约束不同(check约束只能引用自身表中的列),DML触发器可以引用其他表中的列;
触发器可以完成所有约束的功能,但不一定是最佳方案;
触发器能够使用自定义信息和较为复杂的错误处理;

3、DML 触发器可以评估数据修改前后表的状态,并根据该差异采取措施。

4、一个表中的同一个修改语句的DML触发器允许被多个不同的操作(INSERT、UPDATE 或 DELETE)来响应;

四、实例

触发器分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区别?

答:事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

分析:简单而言,事前触发主要是验证一些条件或进行一些准备工作,在表保存之前就触发,而事后触发则是进行收尾工作,保证事务的完整性,在表经过修改以后才触发。行级触发器是对DML语句影响的每个行执行一次,如UPDATE语句影响多行,就会对每行都激活一次触发器。而语句级触发器是对每个DML语句执行一次,如INSERT语句在表中即使插入了100多行,表上的INSERT语句级触发器也只会执行一次。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值