触发器学习笔记
一、概述
触发器:表上的程序,表示当发生了添加、删除、修改操作之后,才会执行的T-SQL程序,这样的程序就称为触发器。
触发器的内容,也就是T-SQL命令的集合,只不过这种命令集合具有这样的一些特性:
- 触发器本身存在表中:虽然触发器的内容是T-SQL命令,但是实际上存储于表中,因此当表被删除时,存于表中的触发器也一起被删除。
- 触发器本身无法单独执行:对于存储过程或函数来说,用户可以单独执行;但触发器则不同,只有当表被添加、修改、删除时,系统才会执行触发操作。
因此,执行触发器的方法就是对表进行添加,修改或者删除操作。
- 触发器本身参与事务:触发器在表添加、删除或修改操作发生后才会被执行,所以如果数据都被删除了才去执行触发器,不是已经太晚了吗?
其实不然,因为触发器本身会加入事务,所以如果触发器在执行时发现任何问题,可以回滚(rollback)添加、删除、修改操作,就好象数据更新不曾发生一样。
不过,如果触发器加入事务中,也会导致事务时间延长,事务影响的资源增多,这不符合一般事务设计的理念(晚打开,早关闭,尽量不要包括复杂的逻辑与视图,这些都应该在事务打开前完成。),因此使用触发器要小心,否则既难维护又影响效率。
(补充:触发器和引起触发器触发的语句位于同一个事务中,所以不管发生什么情况,触发器和引起触发器触发的语句具有原子性)
Create TRIGGER Sales.Demp_delete ON Sales.Customer
After Delete
as
if(select count(*) from deleted>1)
begin
raiserror('您不能一次删除一个以上的顾客',16,1)
ROLLBACK transaction
end
二、如何写触发器
浙公网安备 33010602011771号