一、什么是触发器

1.触发器是对表进行插入、更新、删除操作时自动执行的存储过程

2.触发器通常用于强制业务规则

3.触发器是一种高级约束,可以定义比check等约束更为复杂的约束

 可执行复杂的sql语句(if/while/case)

 可引用其它表中的列

4.触发器定义在特定的表上,与表相关

5.自动触发执行,不能直接调用

6.是一个事务(可回滚,不能手动提交)

 

二、触发器的类型

delete触发器 当删除表中记录时触发,自动执行触发器所定义的SQL语句

insert触发器 当向表中插入数据时触发,自动执行触发器所定义的SQL语句

update触发器 当更新表中某列、多列时触发,自动执行触发器所定义的SQL语句

 

三、 deleted和inserted表

触发器触发时

  1.系统自动在内存中创建deleted表或inserted表

  2.只读,不允许修改;触发器执行完后,自动删除

inserted:用于存储 INSERT 和 UPDATE 语句所影响的行的副本。

1.在执行INSERT 或 UPDATE 语句时,新加行被同时添加到 inserted 表和触发器表中,所以inserted表临时保存了插入或更新后的记录行

2.可以从inserted中检查插入的数据是否满足业务需求,如果不满足,则向用户报告错误消息,并回滚插入操作

 3. 可以执行ROLLBACK TRANSACTION回滚撤销操作

 

deleted表:表用于存储 DELETE 和 UPDATE 语句所影响的行的副本

1.在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中,所以deleted表临时保存了删除或更新前的记录行

2.可从deleted表中检查被删除的数据是否满足业务需求, 如果不满足,则向用户报告错误消息,并回滚插入操作

注意:更新(UPDATE)语句类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中

 

四、如何创建触发器

1.创建触发器的语法

create trigger trigger_name

on table_name

for [delete|insert|update]

as

t-sql语句

go

总结:

触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则

触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作

触发器一般都需要使用临时表:deleted表和inserted表,它们存放了被删除或插入的记录行副本

触发器类型:INSERT触发器、UPDATE触发器、DELETE触发器