如何在MySQL中回滚错误事务?

时间:2015-04-24 10:05:46

标签: mysql transactions rollback

update my_table set limit_id = 2 where id='176846';

start transaction;
update my_table set limit_id = 1 where id='176846';
update my_table set limit_id = 4 where id='176846';  --  <- this one fails
commit;

select limit_id from my_table where id='176846';

我想自动回滚 - 我希望脚本输出2,而不是1。我无法访问正在使用的连接策略。

2 个答案:

答案 0 :(得分:3)

在这里阅读:

http://dev.mysql.com/doc/refman/5.5/en/commit.html

  

默认情况下,MySQL在启用自动提交模式的情况下运行。这意味着   一旦执行更新(修改)表的语句,   MySQL将更新存储在磁盘上以使其永久化。改变   无法回滚。

尝试类似

的内容
SET autocommit = 0;
start transaction;
(...)
commit;

答案 1 :(得分:0)

这取决于limit_id值为4导致错误的原因,但MySql并不总是回滚整个事务。有关详细信息,请参阅:http://dev.mysql.com/doc/refman/5.7/en/innodb-error-handling.html,但在某些情况下,MySql将仅隐式回滚最后一个语句,然后继续执行该事务。