–oracle 规定 不能在触发器中写commit,rollback。????? 试想一下,如果在触发器里面可以使用commit,你执行了某个批量更新操作 每一条都执行触发器的操作,即每一条都commit, 这样就无法再进行rollback到整个更新操作之前的状态。
–采用自治事务的方式,可以在trigger里rollback or commit;
–触发器执行规则 : 对于同一个表上的多个before触发器,遵循’谁先创建谁执行的原则’
–2.2 Msyql触发器的trigger_time和trigger_event 现在,重新注意到trigger_time和trigger_event,上文说过, trigger_time可以用before和after替换,表示触发器程序的执行在sql执行的前还是后 ;trigger_event可以用 insert,update,delete替换,表示触发器程序在什么类型的sql下会被触发。 在一个表上最多建立6个触发器,即1)before insert型,2)before update型,3)before delete型,4)after insert型,5)after update型,6)after delete型。
触发器的一个限制是不能同时在一个表上建立2个相同类型的触发器。这个限制的一个来源是触发器程序体的“begin和end之间允许运行多个语句” (摘自mysql使用手册)。 另外还有一点需要注意,msyql除了对insert,update,delete基本操作进行定义外,还定义了load data和replace语句, 而load data和replace语句也能引起上述6中类型的触发器的触发。 Load data语句用于将一个文件装入到一个数据表中,相当与一系列insert操作。replace语句一般来说和insert语句很像, 只是在表中有 primary key和unique索引时,如果插入的数据和原来primary key和unique索引一致时,会先删除原来的数据, 然后增加一条新数据;也就是说,一条replace sql有时候等价于一条insert sql,有时候等价于一条delete sql加上一条insert sql。即是: ? Insert型触发器:可能通过insert语句,load data语句,replace语句触发; ? Update型触发器:可能通过update语句触发; ? Delete型触发器:可能通过delete语句,replace语句触发;

