第11章 触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第11章触发器

本章学习目标

严格地说,触发器也是一种特殊类型的存储过程,它与表的关系很密切,常用于保护表中的数据。本章主要内容包括触发器的概念、作用、类型,创建触发器的方法,如何对触发器进行管理等。通过本章的学习,读者应了解触发器的概念、作用、类型,熟悉利用存储过程和触发器维护数据完整性的方法,掌握创建和管理触发器的方法等。

学习重点与难点

☑触发器的概念、作用、类型等

☑创建触发器的方法

☑查看、修改和删除触发器的方法

☑查看依赖关系

◆利用存储过程和触发器维护数据完整性的方法

11.1 触发器概述

学习和使用触发器,首先应对概念等有个详细的了解。本节就先来介绍有关触发器的概念、作用、类型等内容。

11.1.1 触发器的概念

触发器(triegger)是一种特殊类型的存储过程,它与表紧密相连,可看作是表格定义的一部分。触发器是在特定表上进行定义的,该表也称为触发器表。触发器不能被显式地调用,当有操作针对触发器表时,例如在表中插入、删除、修改数据时,如果该表有相应操作类型的触发器,那么触发器就自动触发执行。使用触发器可实施更为复杂的数据完整性约束。

触发器基于一个表创建,但是可以针对多个表进行操作,所以触发器常被用来实现复杂的商业规则。例如,在pubs数据库中,存放着出版商(publishers)的信息,存放着出版物(titles)的信息,还存放着出版物与作者关联的信息(titleauthor)以及作者信息(authors)。现在,有一条出版商的信息被删除了,则所有由该出版商出版的出版物都应该将pu_id修改为NULL,或者删除有关的出版物信息。同样,titleauthor表中的信息也应该相应地得到修改。这种涉及到三张表的一致性维护问题,可以使用触发器来实现。在publishers表上设置一个DELETE触发器,当删除一条publishers信息时,触发器自动执行,对titles表和publishers 进行修改。

在SQL Server中,一张表可以有多个触发器。用户可以针对INSERT、UPDATE或DELETE语句分别设置触发器,也可以针对一张表上的特定操作设置多个触发器。触发器里可以容纳非常复杂的T-SQL语句。但是,不管触发器所进行的操作有多复杂,触发器都只作为一个独立的单元被执行,被看作是一个事务。如果在执行触发器的过程中发生错误,则整个事务将会被自动回滚。

触发器和存储过程也是有区别的:存储过程是在数据库上定义的,而触发器是在特定表上进行定义的;存储过程可以由用户直接调用执行,但触发器不能直接调用执行,而是SQL

中文版SQL Server 2000实用基础教程

SERVER自动触发执行的。触发器不允许带参数。

11.1.2 触发器的作用

使用触发器的最终目的是更好地维护企业的业务规则。在实际应用中,触发器主要提供以下功能:

◆级联修改数据库中的所有相关表,如上一节中所述。

◆撤消回滚违反引用完整性的操作,防止非法修改数据。

◆执行比检查约束更复杂的约束操作。

◆查找在数据库修改前后,表状态之间的差别,并根据差别来分别采取相应的措施。

◆在一张表的同一类型的操作是设置多个触发器,从而可以针对同样的修改语句执行不同的多种操作。

11.1.3 触发器的类型

SQL Server 2000提供了两种触发器:INSTEAD OF和AFTER触发器。这两种触发器的差别在于他们被激活的时机不同:

◆AFTER 触发器在触发它们的语句完成后执行。AFTER 触发器在约束检查之后执行,如果该语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。不能为视图指定AFTER 触发器,只能为表指定该触发器。可以为每个触发操作(INSERT、UPDATE 或DELETE)指定多个AFTER 触发器。如果表有多个AFTER 触发器,可使用sp_settriggerorder 定义哪个AFTER 触发器最先激发,哪个最后激发。除第一个和最后一个触发器外,所有其它的AFTER 触发器的激发顺序不确定,并且无法控制。在SQL Server 2000 中AFTER 是默认触发器。不能在SQL Server 7.0 版或更早的版本中指定AFTER 或INSTEAD OF,这些版本中的所有触发器都作为AFTER 触发器运行。

◆INSTEAD OF 触发器是SQL Server 2000引进的一种新的触发器类型,用于替代引起触发器执行的T-SQL语句。可在表和视图上指定INSTEAD OF 触发器。在SQL Server 2000 中,不能为每个触发操作(INSERT、UPDATE 和DELETE)定义多个INSTEAD OF 触发器。INSTEAD OF 触发器在约束检查之前执行。

11.1.4 与触发器密切相关的两个专用表

在使用触发器过程中,SQL Server使用到了两个特殊的临时表:inserted表和deleted表。这是两个逻辑表,由系统来维护,不允许用户直接对这两个表进行修改。这两张表都存在与高速缓存中(如果内存不够用,也可能存储在硬盘上),实际上是事务日志的视图,它们与被该触发器作用的表的结构相同。触发器工作完成后,这两个表也会被删除。

用户可以使用这两张临时表来检测某些修改操作所产生的效果。例如,可以使用SELECT语句来检查INSERT语句和UPDATE语句执行的插入操作是否成功,触发器被这些语句触发等。但是不允许用户直接修改inserted和deleted临时表中的数据。

inserted和deleted表都是针对当前触发器的局部临时表,这些表只对应于当前触发器的基本表。如果在触发器中使用、了存储过程,或者是产生了嵌套触发器的情况,则不同的触发器将会使用属于自己基本表的inserted和deleted临时表。

222

相关文档
最新文档