有个表上建了触发器,另外一个程序往这个表写数据,之前是使用的before,发现当数据有触发器处理不了的时候会阻止程序写数据到该表,现如果把触发器改成after,那么当程序往表写的某一条数据在执行触发器时被卡住,我有两问题:
1、此时程序是否可以继续写后面的数据到表中?
2、写到表中的数据,触发器能否执行?
在线等。

解决方案 »

  1.   

    1,应该不可以,after 应该是commit 前触发执行的
    2.会执行建议建一张测试表测试一下
      

  2.   

    正常来说,trigger对数据得处理只有成功或者失败两种结果吧。
    如果卡住的话,说明代码写得有问题。
      

  3.   

    1.改成after后,如果程序catch到了错误并处理了,可以继续下一条数据的。当前数据不会被插入,整个insert语句和trigger里面的是一个事务(如果trigger没有采用自治事务的话)。
    2.会,整个是一个事务。
      

  4.   

    触发器与引起此触发器的语句update,insert等属于同一个事务
    如果触发器失败回滚,update,insert一并回滚
      

  5.   

    看看卡住是什么原因,是正在处理、挂起等待还是死锁
    如果触发器执行出错,整条语句回滚,在这点上before和after没有区别
    触发器怎么写的?
      

  6.   

    楼主要花点时间来理清代码就行了,
    再一次证明滥用触发器是不好的,弄得以后不好维护,楼主是受害者,同情ing;