欢迎来到天天文库
浏览记录
ID:31333841
大小:328.50 KB
页数:95页
时间:2019-01-08
《数据库系统管理、设计和实例分析(下)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WORD完美整理版第13章触发器原理及使用在上一章我们介绍了一般意义的存储过程,即用户自定义的存储过程和系统存储过程。本章将介绍一种特殊的存储过程,即触发器。以下几个分几个部分对触发器的概念、作用、工作原理以及触发器的设计和使用做尽介绍,使读者了解如何定义触发器,创建和使用各种不同复杂程度的触发器。13.1触发器基本概念13.1.1触发器的概念及作用触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。存储过程和触发器同是提高数据库服务器性能的有力工具。触发器作为一种特殊
2、类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLServer就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:(1)强化约束(Enforcerestriction)触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的更新和变化。(2)级联运行(Casc
3、adedOperation)触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器包含对另外一个表的数据操作(如删除、更新、插入),而该操作又导致该表上的触发器被触发。(3)存储过程的调用(StoredProcedureInvocation)为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS之外进行操作。由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的操作。此外一个表的同一类型(INSERT、UPD
4、ATE、DELETE)的多个触发器能够对同一种数据操作采取多种不同的操作。触发器可以用于维护数据参照完整性和以下一些场合:(1)触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起对子孙表的一系列修改,从而保证数据的一致性和完整性。(2)触发器可以禁止或撤消违反参照完整性的修改。(3)触发器可以强制比用CHECK约束定义更加复杂的限制。触发器也是一个数据库对象。一个触发器和三部分内容有关:激活触发器的表、激活触发器的数据修改语句和触发器要采取的动作。但是,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也
5、不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。13.1.2触发器的种类SQLServer2000支持两种类型的触发器:AFTER触发器和INSTEADOF触发器。1)AFTER触发器即为SQLServer范文范例参考指导WORD完美整理版2000版本以前所介绍的触发器。该类型触发器要求只有执行完某一操作(INSERT、UPDATE、DELETE),并处理过所有约束后,触发器才被触发,且只能在表上定义。如果操作违反约束条件,将导致事务回滚,这时就不会执行后触发器。可以为针对表的同一操作定义多个AFTER触发器。AFTER触发器
6、可以指定哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder来完成此任务。2)INSTEADOF触发器该类触发器表示并不执行其所定义的操作(INSERT、UPDATE、DELETE),而仅是执行触发器本身。既可在表上定义INSTEADOF触发器,也可以在视图上定义INSTEADOF触发器,但对同一操作只能定义一个INSTEADOF触发器。13.2触发器原理从以上的介绍中我们可以已了解到触发器具有强大的功能,那么MSSQLServer是如何使得触发器能够感知数据库数据的变化、维护数据库参照完整性及比CHECK约束更复杂的约束呢?下面我们将对其工作
7、原理及实现做较为详细的介绍,以便大家学习创建、理解和使用各种类型的触发器,完成各种任务。每个触发器有两个特殊的表:插入表和删除表,分别为inserted和deleted。有以下几个特点:1)这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此不允许用户直接对其修改。2)这两个表的结构总是与被该触发器作用的表有相同的表结构。3)这两个表是动态驻留在内存中的,当触发器工作完成,这两个表也被删除。这两个表主要保存因用户
此文档下载收益归作者所有