日期:2014-05-17  浏览次数:21180 次

commit与触发器的疑问
一个表,它有一个行级触发器,进行update,delete,insert都会触发,现在我写如下代码进行数据操作:
delete from table1 where name = 'user1';
insert into table1 ('user1','mail');
commit;

它是不是会先触发delete事件,然后再触发insert事件?
还是要像下面这样写才会触发两个事件?
delete from table1 where name = 'user1';
commit;
insert into table1 ('user1','male');
commit;

------解决方案--------------------
它是不是会先触发delete事件,然后再触发insert事件?
是的.

delete from table1 where name = 'user1';
insert into table1 ('user1','mail');
commit;
这样就可以

相当于
delete from table1 where name = 'user1';
执行触发器;
insert into table1 ('user1','mail');
执行触发器;

触发器和出发他的语句相当于同一个事物,他们会一起提交或者回滚.

------解决方案--------------------
1. 会2次触发触发器的执行,一次是由delete事件触发,一次是由insert事件触发。

2. 这2种操作,对触发器的触发是一致的。
------解决方案--------------------
触发器的触发与你delete insert语句commit没有联系吧,commit的作用提交这个transaction,让其他的user也能看到你的update,commit后就不能rollback了!
------解决方案--------------------
會分別觸發,然後一起提交transaction,如果一方不符合要求則不能提交。
------解决方案--------------------
触发是有先后,但是是作为一个transaction,一起提交。应该用上面那个!