一,触发器的定义
触发器是一种特殊类型的存储过程,主要是通过事件进行触发而被执行。当对表进行UPDATE、 INSERT、 DELETE 这些操作时,数据库会自动执行被定义的语句。
二,触发器与存储过程的区别
存储过程必须要有用户、应用程序或者触发器来显示的调用并执行,可以通过存储过程的名字直接被调用,类似于表的操作。而触发器则必须要满足特定的条件,才能通过事件被自动触发。
三,触发器的作用
触发器的主要作用就是能强化约束关系从而保证数据完整性和一致性。其次还有一些功能,例如:
1)跟踪数据库内的操作,从而不允许数据库中未经许可的指定更新和变化;
2)检测数据库内的操作,自动级联影响整个数据库的数据。例如,Table_A表上的触发器中有对Table_B表的数据的(INSERT,DELETE,UPDATE)操作,而此操作又导致该表上触发器被触发。
Table_A表
Table_B表
说明:inserted表和deleted表用于存放对表中数据行的修改信息,他们是触发器执行时自动创建的,是临时表。当触发器工作完成,它们也被删除。只读表,不能向它们写入内容。
inserted表:用来存储INSERT和UPDATE语句所影响的行的副本
deleted表:用来存储DELETE和UPDATE语句所影响行的副本
详细请参照触发器 inserted,deleted用法
四,触发器的分类
SQL Server支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。
1)AFTER 触发器
在语句执行后触发,不论此语句影响了多少行数据(包括0行),都只触发一次。如果原语句因为违反约束而未生效,触发器将不被触发。
2)INSTEAD OF 触发器
不执行语句的操作(INSERT、 UPDATE、 DELETE),而是执行这个触发器。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。