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

Iva*_*van 3 mysql triggers

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

如果答案是肯定的,请解释如何.

Bar*_*law 10

我发现自从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 ;
Run Code Online (Sandbox Code Playgroud)


Fli*_*mzy 6

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


Mch*_*chl 5

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

触发器不能使用显式或隐式开始或结束事务的语句,例如START TRANSACTION,COMMIT或ROLLBACK。

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