- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
触发器原理和使用
触发器原理和使用
第13章 触发器原理及使用
在上一章我们介绍了一般意义的存储过程,即用户自定义的存储过程与系统存储过程。本章将介绍一种特殊的存储过程,即触发器。以下几个分几个部分对触发器的概念、作用、工作原理以及触发器的设计与使用做尽介绍,使读者了解如何定义触发器,创建与使用各种不同复杂程度的触发器。
13.1 触发器基本概念
13.1.1 触发器的概念及作用
触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。 触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。存储过程与触发器同是提高数据库服务器性能的有力工具。
触发器作为一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
触发器的主要作用就是其能够实现由主键与外键所不能保证的复杂的参照完整性与数据的一致性。除此之外,触发器还有其它许多不同的功能:
(1) 强化约束(Enforce restriction)
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的更新与变化。
(2)级联运行(Cascaded Operation)
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器包含对另外一个表的数据操作(如删除、更新、插入),而该操作又导致该表上的触发器被触发。
(3)存储过程的调用(Stored Procedure Invocation)
为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS之外进行操作。
由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的操作。此外一个表的同一类型(INSERT、UPDATE、DELETE)的多个触发器能够对同一种数据操作采取多种不同的操作。
触发器可以用于维护数据参照完整性与以下一些场合:
(1)触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起对子孙表的一系列修改,从而保证数据的一致性与完整性。
(2)触发器可以禁止或撤消违反参照完整性的修改。
(3)触发器可以强制比用CHECK约束定义更加复杂的限制。
触发器也是一个数据库对象。一个触发器与三部分内容有关:激活触发器的表、激活触发器的数据修改语句与触发器要采取的动作。
但是,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表与插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。
13.1.2 触发器的种类
SQL Server 2000 支持两种类型的触发器:AFTER触发器与INSTEAD OF触发器。
1)AFTER触发器
即为SQL Server 2000版本以前所介绍的触发器。该类型触发器要求只有执行完某一操作(INSERT、UPDATE、DELETE),并处理过所有约束后,触发器才被触发,且只能在表上定义。如果操作违反约束条件,将导致事务回滚,这时就不会执行后触发器。
可以为针对表的同一操作定义多个AFTER触发器。AFTER触发器可以指定哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder来完成此任务。
2)INSTEAD OF触发器
该类触发器表示并不执行其所定义的操作(INSERT、UPDATE、DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD OF触发器,也可以在视图上定义INSTEAD OF触发器,但对同一操作只能定义一个INSTEAD OF触发器。
13.2 触发器原理
从以上的介绍中我们可以已了解到触发器具有强大的功能,那么MS SQL Server 是如何使得触发器能够感知数据库数据的变化、维护数据库参照完整性及比CHECK约束更复杂的约束呢?下面我们将对其工作原理及实现做较为详细的介绍,以便大家学习创建、理解与使用各种类型的触发器,完成各种任务。
每个触发器有两个特殊的表:插入表与删除表,分别为inserted与deleted。有以下几个特点:
1)这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此不允许用户直接对其修改。
2)这两个表的结构总是和被该触发器作用的
文档评论(0)