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
。我无法访问正在使用的连接策略。
答案 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将仅隐式回滚最后一个语句,然后继续执行该事务。