触发器的分类

来源:百度文库 编辑:神马文学网 时间:2024/04/26 07:38:46
触发器的分类- -
(这篇文章尚需整理)
想先说说触发器的分类,当然不是insert触发器、update触发器或者after触发器、instead of触发器这样的分类,而是试图从触发器的应用或者说触发器的功能上来分类。我觉得触发器可以分为以下类,各类的功能不同,写触发器注意的方面也应该不同。
1、日志类触发器
这类触发器的功能是记录对表的操作,从技术上来说,这类触发器最简单,因为不管是记录操作类别还是记录改前、删前数据,触发器都只需做插入操作,典型的贴子有:
http://community.csdn.net/Expert/topic/3243/3243457.xml?temp=.9883539
看起来复杂,但是难度不在触发器这一块。
http://community.csdn.net/Expert/topic/3049/3049973.xml?temp=.5422632
记录改前数据,简单吧?
2、约束类触发器
这是联机帮助推荐的触发器的使用方法,主要用于实现一些不能用约束来表示的业务规则,这类触发器有个共同特点是:都必须有判断是否违反规则,如果违反规则,抛出错误、回滚事务并返回的语句,典型的贴子有:
http://community.csdn.net/Expert/topic/3241/3241485.xml?temp=.9982263
3、同步类触发器
这类触发器论坛问的比较多,大部分是一个表的数据变化要同时在另一个表也变化,这类触发器应该比较好的理解inserted、deleted临时表,涉及的表一定要有主键,而且应该规定不允许修改主键,个人认为特别忌讳用游标(因为效率)和把临时表的数据取到变量(因为这样容易在一次更改多条记录的时候漏处理一些数据),典型的贴子有:
http://community.csdn.net/Expert/topic/3252/3252484.xml?temp=.1456873
一个表的修改反映到另一个表,搂主的错误其实是写update语句的错误。
http://community.csdn.net/Expert/topic/2861/2861142.xml?temp=5.314273E-02
一个表的变更要影响另一个表的变更,楼主的
if ( select Subject from inserted ) = ‘短期借款‘
适合取到变量一样的,不能处理一次插入多条记录的情况。
4、统计类触发器
统计类触发器就是在插入、修改、删除一个表的数据的同时,把这个表的统计数据更新到另一个表,这类应用应该是比较复杂的,触发器不好调试,写这类触发器的时候尤其要小心,要考虑各种可能的情况。
这个例子的答案好像还有错误,至少不能只考虑update的情况
http://community.csdn.net/Expert/topic/3050/3050415.xml?temp=2.557635E-04
5、综合类触发器
大多是2、3、4类功能组合在一起,比如在进销存系统,进销表的触发器,实现修改库存表数据,同时约束库存不能负数,组合多类触发器功能的触发器。
(没找到贴子)
6、特殊的触发器
记得有个贴子,正牌邹建回答的,大意是在某个表插入数据后一定时间,要做某个动作,正牌邹建的解法使用触发器加job,job定时触发,可惜找半天没找到。
(RealGz补充)
7、校正类触发器,类似于约束类,但是但是不同于约束类,在使用冗余获得查询性能的应用中尤其有效,用来校正输入者的输入值
8、伪装类触发器,一般是由于View对update的种种限制,使用Instead of 触发器来伪装insert,同理,一些特殊表特殊计算列也可以通过触发器伪装。