可以在MySQL触发器中执行ROLLBACK吗?

时间:2011-07-09 10:03:46

标签: mysql triggers

这就是问题:可以在MySQL触发器中执行ROLLBACK吗?

如果答案是肯定的,那么,请解释一下。

3 个答案:

答案 0 :(得分:9)

我发现自从MySQL 5.5以来这个功能存在并且在早期版本中不起作用。

触发器不会回滚或提交。 要启动任何回滚,您必须引发异常。因此,您的insert / update / delete命令将中止。 必须围绕SQL命令引发回滚或提交操作。

要在XXX的触发器(例如)中提高异常:

create trigger Trigger_XXX_BeforeInsert before insert on XXX
for each row begin

    if [Test]
    then

      SIGNAL sqlstate '45001' set message_text = "No way ! You cannot do this !";

    end if ;

end ;

答案 1 :(得分:5)

如果触发器引发异常,那将中止事务,有效地回滚。这对你有用吗?

答案 2 :(得分:5)

来自:http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html

  

触发器无法使用该语句   明确地或隐含地开始或结束   像START这样的交易   TRANSACTION,COMMIT或ROLLBACK。

  

对于事务表,a。失败   语句应该导致所有回滚   声明执行的更改。   触发失败导致   声明失败,因此触发失败   也导致回滚。对于   非事务性表,这种回滚   无法做到,所以虽然   声明失败,执行任何更改   在错误点之前保留   实际上。