【七】触发器
1. 触发器的概念:触发器是一种实施复杂的、完整性约束的特殊存储过程,它在SQL Server中进行某张特定的表修改时由SQL Server自动执行。
l 触发器有两张特殊的表:插入表(Inserted)和删除表(Deleted)
l Inserted表:存放insert和update语句执行所影响行的副本。即用于插入或更新表的新行值,在插入或更新表的同时,也将其副本存入inserted表中。
l Deleted表:存放delete或update语句执行所影响行的副本。当执行一条delete语句时,从表中删除的每一行都包含在删除触发器内的delete表中。
*注:inserted 和 deleted表只能由创建他们的触发器引用。
2. 触发器分为:After触发器和Instead of 触发器,触发器可以查询到其他表,还可以包含复杂的T-sql语句
l After触发器:在触发事件发生后才执行的触发器,也就是说,先执行insert、update、delete等语句然后才执行After触发器,这个值适合于数据表,不适合视图,这是默认的触发器。
l Instead of 触发器:有时也叫“替代”触发器,这个触发器是在触发事件发生之前执行的 ,即先执行instead of 触发器然后执行insert 、update、delete语句。这类适合数据表,也适合视图。
在创建触发器前,需注一下问题:
l Create trigger语句必须是批处理中的第一条语句,而且只能是用于一张表或视图。
l 创建触发器的权限默认分配给表的所有者,而且不能将该权限转给其他用户。
l 虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。
创建触发器需要指定一下内容:
l 名称
l 定义触发器表
l 触发器在什么时候被触发
l 激活触发器的数据修改语句,有效选项为inster、update或delete。多条数据修改语句看激活同一个触发器。例如:触发器可以由insert或update语句激活
如何创建触发器?
语法:
CREATE TRIGGER trigger_name
ON {table_name | view_name}
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
AS
T-SQL语句
GO
*各参数的含义:
l trigger_name:触发器名称
l WITH ENCRYPTION表示加密触发器定义的SQL文本
lDELETE, INSERT, UPDATE指定触发器的类型
l Table_name | view_name:是在执行触发器的表或视图名称。
*注:触发器不能创建在临时表上,而且一个触发器只能作用在一张表上
6.创建insert触发器;
7.创建Delete(删除)触发器
8.创建Update(更新)触发器
9.小结
10. instead of触发器的使用
11.使用触发器的优缺点: