几种常见触发器工作方式的讨论

2012-07-05 06:06
科技传播 2012年12期
关键词:触发器视图语句

张 宇

武汉软件工程职业学院,湖北 武汉 430033

设计触发器时,理解触发器的工作方式非常重要。在触发器的执行过程中,对每个数据库表会应用到两个临时表:inserted表和deleted表,这是两个仅在内存中的表,结构与定义触发器的表一样,但用户不能直接对表中的数据进行操作,原表中数据的更新过程将经常应用到这两个临时表,各更新操作过程中inserted表和deleted表所起的作用见表1。

表1 数据更新与表的记录

以下以学生数据库为例讨论INSERT触发器、UPDATE触发器、DELETE触发器、INSTEAD OF触发器工作原理及应用。

创建学生成绩数据库st,包含三个表:学生表,课程表和成绩表。

1 INSERT触发器

当试图向一个触发器保护的表中插入一行数据时,INSERT触发器将被激活。在插入操作过程中,插入的数据记录在inserted表中,执行插入的过程为:

1)向定义了INSERT触发器的表发送INSERT语句;

2)INSERT语句记录到日志中;

3)执行触发器动作。

当INSERT触发器被激发时,新的数据行被添加到表中,同时被插入数据行的副本也被添加到临时表inserted表中,然后,触发器中定义的语句接着被执行。触发器也可以检查inserted表,确定是否执行触发器动作和如何执行触发器动作。

为学生表创建插入触发器,当在学生表中插入学生时,在成绩表中插入该生所有课程的成绩记录,成绩为NULL。代码如下:

2 UPDATE触发器

当更新定义有UPDATE触发器的表中的数据时,UPDATE操作将激发对应的触发器,执行更新时,UDPATE语句向deleted表中添加将被更新的行在更新前的原始数据行副本,把更新后的数据行副本添加到inserted表中,然后执行解发器中定义的语句,执行过程为:

1)向表发送UPDATE语句;

2)在日志中以INSERT和DELETE语句方式记录UPDATE语句;

3)触发器可以检查deleted表和inserted表以及被更新的库表,确定是否更新多行以及如何执行触发器动作。在触发器中,可以通过IF UPDATE语句监控特定列数据是否被更新,当被监测列被更新时,触发器可以采取相应的动作。

为学生表创建更新触发器,当更新学生表中学生的学号时,在成绩表中也相应更新该生的学号信息。代码如下:

3 DELETE触发器

当试图删除定义了DELETE触发器的表中数据行时,DELETE触发器被激发。DELETE操作在删除数据行时,将被删除行的一个副本插入到deleted表中,执行过程为:

1)向表发送DELETE语句;

2)在日志中记录DELETE语句;

3)执行触发器动作。

在DELETE语句的执行过程中被插入到deleted表中的数据行,不再存在于原数据表中,所以原数据表和deleted表中不会有共同的数据行。

注意:为DELETE语句定义的触发器对TRUNCATE TABLE语句并不执行,因为TRUNCATE TABLE语句不记录到日志中。

为学生表创建删除触发器,当删除学生表中的学生时,成绩表中该生的所有成绩也相应删除。代码如下:

4 INSTEAD OF触发器

INSTEAD OF触发器取消所有的触发动作,原来的触发动作(插入、更新或删除)不再发生,并执行相应的替代功能。INSTEAD OF触发器增加了可用于表和视图的各种类型的更新操作,当需要使用通常不可更新的视图支持数据修改时,INSTEAD OF触发器可以通过内含SQL语句完成数据的更新操作。

对每一种触发动作,每个表或视图只能有一个INSTEAD OF触发器,但在带有WITH CHECK OPTION定义的视图中不能创建INSTEAD OF触发器。

为学生表创建instead of触发器,当插入学生的年龄小于30时才插入学生表

[1]萨师煊,王珊.数据库系统概论[M].高等教育出版社,2004,1.

[2]王路群.数据库原理与SQL Server教程[M].人民邮电出版社,2006,4.

[3]微软公司.SQL Server 2005数据库开发与实现[M].高等教育出版社,2007,9.

猜你喜欢
触发器视图语句
重点:语句衔接
主从JK触发器逻辑功能分析
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
使用触发器,强化安全性
如何搞定语句衔接题
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法