MySQL触发器中是否可以执行ROLLBACK操作?

5

这就是问题所在:MySQL触发器中是否可以执行ROLLBACK操作?

如果答案是肯定的,请说明如何操作。

3个回答

13

我发现这个功能自MySQL 5.5起存在,之前的版本不支持。

触发器没有回滚或提交。要启动任何回滚操作,您必须引发异常。因此,您的插入/更新/删除命令将中止。回滚或提交操作必须围绕您的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 ;

7

如果触发器引发异常,那么将会中止事务,实际上是回滚操作。这个方案对您是否可行?


5

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

触发器不能使用明确或隐式启动或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。

并且

对于事务性表,一个语句的失败应该导致语句执行的所有更改回滚。触发器的失败会导致语句失败,因此触发器的失败也会导致回滚。对于非事务性表,这种回滚是不可能的,因此尽管该语句失败,但在出错点之前所做的任何更改仍然有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接