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

可以在MySQL触发器中执行回滚吗?,mysql,triggers,Mysql,Triggers,这就是问题所在:是否可以在MySQL触发器中执行回滚 如果答案是“是”,那么请解释如何操作。如果触发器引发异常,将中止事务,从而有效地回滚。这对你有用吗?来自: 触发器不能使用 显式或隐式地开始或结束 一种事务,如启动 事务、提交或回滚 及 对于事务表,一个 语句应导致所有 由语句执行的更改。 触发器故障会导致 语句失败,因此触发失败 也会导致回滚。对于 非事务表,如回滚 无法完成,因此尽管 语句失败,执行任何更改 在误差点之前保持 实际上 我发现这种功能性自MySQL 5.5以来就存在,在早期

这就是问题所在:是否可以在MySQL触发器中执行回滚


如果答案是“是”,那么请解释如何操作。

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

来自:

触发器不能使用 显式或隐式地开始或结束 一种事务,如启动 事务、提交或回滚

对于事务表,一个 语句应导致所有 由语句执行的更改。 触发器故障会导致 语句失败,因此触发失败 也会导致回滚。对于 非事务表,如回滚 无法完成,因此尽管 语句失败,执行任何更改 在误差点之前保持 实际上


我发现这种功能性自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 ;