2024年3月9日发(作者:)
SQL
第
16
章
SQL
触发器
前面已经介绍过了表、视图、存储过程以及函数的创建。一般而言,创建这些对象后,
需要配置一些对应的操作。例如,执行SELECT语句查询数据,执行EXEC命令执行存储过
程等。SQL也支持自动执行的对象,对数据的更改作出反应,即触发器。
16.1触发器的基本概念
触发器是一种特殊的存储过程,它在表的数据变化时发生作用。触发器可以维护数据完
整性。
16.1.1触发器简介
触发器在数据库里以独立的对象存储,与存储过程不同的是,存储过程通过其他程序来
启动运行,而触发器是由一个事件来启动运行。即当某个事件发生时,触发器自动地隐式运
行。并且,触发器不能接收参数。
触发器对象定义了触发器的特征和被调用时采取的行动。而这些动作是通过一个或多个
SQL语句来实现的。SQL支持3种类型的触发器:INSERT(插入)、UPDATE(更新)和
DELETE(删除)。当向表中插入数据、更新数据或删除数据时,触发器就被调用。通过给表
定义一个或多个触发器,可以指定哪个数据修改时,可以激发触发器。
16.1.2触发器执行环境
触发器执行环境包含了触发器正确执行所必需的信息。这些信息主要是触发器本身的细节
和触发器所定义的目标表。另外,触发器执行环境还包括一个或两个测试表,称之为INSERTED
表和DELETED表。测试表是虚表,用于保存目标表更新、插入或删除的数据信息。
这些测试表用来测试数据修改的结果,以及设置触发器行动的条件。用户不能直接修改
测试表中的数据,但能在SELECT语句中,使用这些表来检测INSERT,UPDATE或DELETE
的结果。各种类型触发器用到的测试表如图16.1所示(针对SQLServer数据库系统而言)。
SQL
trigger表
**
…
Insered表
新数据
INSERT
DELETE
trigger表
**
…
trigger表
**
…
修改的数据
Deleted表
被删除数据
Deleted表
被删除数据
Insered表
新数据(修改
的数据)
UPDATE
图
16.1
触发器测试表
deleted表存放了DELETE和UPDATE语句中相关行的副本。在DELETE或UPDATE
语句的执行中,这些相关行从trigger表中移到了deleted表中。一般情况下,这两张表
中无共同行。
insertded表存放了INSERT和UPDATE语句中的副本。在INSERT或UPDATE语句的
执行中,这些新行同时被加到inserted表和trigger表中。inserted表中的行是trigger表中
新行的副本。
一个UPDATE效果上等价于一个DELETE再接着一个INSERT。首先“旧”行被复制
到deleted表中,然后新行被复制到trigger表和inserted表中。
16.2SQLServer中的触发器
当对某一表进行操作时,SQLServer就会自动执行触发器所定义的SQL语句,从而确
保对数据的处理必须符合规则。触发器的作用就是保证参照完整性和数据的一致性。
16.2.1SQLServer触发器的种类
SQLServer2000及其以后的版本支持两种类型的触发器:AFTER触发器和INSTEAD
OF触发器。其中AFTER触发器即为前面介绍的UPDATE、INSERT、DELETE触发器。
INSTEADOF触发器表示并不执行其所定义的操作(INSERT、UPDATE、DELETE),
而仅是执行触发器本身。既可在表上定义INSTEADOF触发器,也可以在视图上定INSTEAD
OF触发器,但对同一操作只能定义一个INSTEADOF触发器。
16.2.2使用CREATETRIGGER命令创建触发器
在SQLServer中,可以采用CREATETRIGGER命令创建触发器。语法如下。
CREATETRIGGERtrigger_name
ON{table|view}
[WITHENCRYPTION]
{
{{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}
第16章SQL触发器
326


发布评论