欢迎来到天天文库
浏览记录
ID:9962330
大小:48.00 KB
页数:5页
时间:2018-05-17
《sql server 2000触发器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SQLServer2000触发器一、简介触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Serve2000 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。两大类:DML触发器和DLL触发器。1、优缺点触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:<1>强化约束(Enforcerestriction) 触发器能够实现比CHECK语句更为复杂的约束。<2
2、>跟踪变化Auditingchanges 触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。<3>级联运行(Cascadedoperation)。 触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。<5>存储过程的调用(Storedprocedureinvocation)。 为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外
3、进行操作。 由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、UPDATE、DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。 总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。2、注意
4、事项<1>在视图上创建普通触发器可能会出现“对象无效”的错误,实际上,我们不能在视图上创建 FOR 触发器,而应该创建 INSTEAD OF 触发器。在 SQLServer2000 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。 我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器. 但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。<2>FOR CREA
5、TE TRIGGER 语句FOR 关键字之后可以跟 INSERT、UPDATE、DELETE 中的一个或多个,也就是说在其它情况下是不会触发触发器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。<3>Truncate与delete的区别:TRUNCATE TABLE 和不带 WHERE 的 DELETE 功能是一样的,都是删除表中的所有数据,不过 TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE 直接释放数据页并且在事务日志中也只记录数据页的释放,而 DE
6、LETE 是一行一行地删除,在事务日志中要记录每一条记录的删除。 那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢?在以下情况是不行的: 1、要保留标识的情况下,不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识。 2、需要使用触发器的情况下,不能使用 TRUNCATE TABLE ,它不会激发触发器。 3、对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。 4、对于参与了索引视图的表不能使用 T
7、RUNCATE TABLE ,注意指索引视图,并非普通视图。 二、触发器常用功能操作<1>一个有趣的触发器应用:触发器回滚触发器内部语句出错时,前面对数据更改操作将会无效。 举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。 我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。 CREATETRIGGERtrigger_nameON表名 FORup
8、date ASif update(userName) rollback transaction关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。 <2>不能在触发器中使用
此文档下载收益归作者所有