第11单元 创建和管理触发器
学习目标
知识目标:
了解触发器的作用
掌握触发器的分类
知道触发器中DELETED表和INSERTED表的作用
能力目标:
会创建和管理触发器
会引发触发器执行
任务11.1触发器的作用和分类
(一)触发器的作用
触发器(Trigger)是一种特殊类型的存储过程,它也是由若干条T-SQL语句组成,可以实现一定的功能。与存储过程不同的是,触发器的执行不需要通过调用来完成,而是当用户对数据库、数据库对象、表中的数据执行某种操作后自动触发的。
触发器不允许带有参数,其定义依赖于各种对象,如表、数据库、服务器等,也可以看作是对象的一部分。
触发器中的代码可以查询其它表,而且可以包含复杂的 SQL语句,主要用于强制服从复杂的业务规则或要求、保护特定的数据等。
触发器是一种特殊的存储过程,它作用与约束类似,主要用于保证复杂的数据完整性需求。存储过程执行是通过执行命令主动调用的,而触发器执行不能用命令直接调用,它只能通过某些事件触发而被引发执行。
触发器主要有以下作用:
1.强制数据的引用完整性;
2.级联修改相关数据;
3.跟踪数据变化,防止数据非法修改;
4.返回自定义的错误信息;
5.调用更多存储过程。
触发器可以分为两类:数据操作语言(DML)触发器和数据定义语言(DDL)触发器。
本章主要介绍数据操作语言(DML)触发器的创建和管理。
(二)触发器的分类
根据触发器被激活的时机,DML触发器可分为两种类型:AFTER触发器和INSTEAD OF触发器。
AFTER触发器又被称为后触发器,在引起触发器执行的操作成功完成之后激发该类触发器,如果操作因某种原因没有执行成功,则触发器不会执行。每个表可定义多个AFTER触发器,AFTER触发器只能定义在表上,不能创建在视图上。
INSTEAD OF触发器又被称为替代触发器,它代替触发操作执行,即是说触发器在数据发生变动之前被触发,取代操作数据的动作而执行触发器中定义的操作。INSTEAD OF触发器既可以定义在表上,也可以定义在视图上,每个触发操作(INSERT、UPDATE、DELETE)只能定义一个INSTEAD OF触发器。
(三)触发器的创建与执行
inserted表:当向表中插入记录时,如果该表存在INSERT触发器,系统将自动创建一个与该表结构相同的inserted临时表,新插入的这条记录被添加到该表和inserted临时表中,inserted临时表中保存的是当前插入记录的副本。
deleted表:当从表中删除记录时,如果该表存在DELETE触发器,系统将自动创建一个与该表结构相同的deleted临时表,当前被删除的记录被保存到deleted临时表中。
修改表中的数据,相当于删除了一条旧记录,同时添加了一条新记录。当某个表定义了UPDATE触发器,表中的数据被修改时,表中原记录会被复制到deleted表中,修改之后的新记录会保存在inserted表中。UPDATE触发器执行完毕之后,两个表都会被删除。