这就是问题:可以在MySQL触发器中执行ROLLBACK吗?
如果答案是肯定的,那么,请解释一下。
答案 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。失败 语句应该导致所有回滚 声明执行的更改。 触发失败导致 声明失败,因此触发失败 也导致回滚。对于 非事务性表,这种回滚 无法做到,所以虽然 声明失败,执行任何更改 在错误点之前保留 实际上。