回滚在MySQL中不起作用

时间:2010-05-18 03:19:59

标签: mysql

我有一个用户表,我有5条记录。

我删除了两条记录,然后执行了rollback命令,它成功执行了。

但是删除了两张未恢复的记录。

用户表引擎为InnoDB

8 个答案:

答案 0 :(得分:9)

您应该能够回滚事务,因为表引擎是InnoDB。 enter image description here

无论如何,这是进行交易的正确方法,

SET autocommit=0;
START TRANSACTION; 
Your Query here.
ROLLBACK;

并确保在您需要回滚的查询之后没有使用COMMIT。参考 Table EnginesTransaction。并且在创建数据库连接时,默认情况下它处于自动提交模式。这意味着每个单独的SQL语句都被视为一个事务,并在执行后立即自动提交。因此,如果您需要自己进行交易,则必须按AUTOCOMMIT = 0关闭自动提交模式。有关详细信息,请参阅此link

答案 1 :(得分:6)

By default, MySQL starts the session
for each new connection with
autocommit enabled,

您可以在运行查询之前设置自动提交模式禁用

SET autocommit=0;

参考:

<强> Link 1

<强> Link 2

答案 2 :(得分:3)

SET autocommit=0;
BEGIN;
.
.
.
ROLLBACK;

START TRANSACTION, COMMIT, and ROLLBACK Syntax

答案 3 :(得分:2)

确保您已执行命令

start transaction;  

在查询删除之前。

答案 4 :(得分:2)

我不知道你是否锁定表,但我遇到了同样的问题,似乎回滚无效。

在我的交易中,我称之为“LOCK TABLES ...”,其中

  

在尝试锁定之前隐式提交任何活动事务   表格

http://dev.mysql.com/doc/refman/5.0/en/lock-tables-and-transactions.html

我最终在交易之前锁定(之前),因为这是我在交易中做的第一件事。或者,你可以像文档建议那样做:

SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;

答案 5 :(得分:0)

我有同样的问题,但我检查过innodb支持

第一: 验证Engine INNODB是否可用:使用:

mysql> show engines;

如果禁用INNODB:那么

第二: 转到文件“my.ini”,我的情况是在C:\ AppServ \ mysql中 在此文件中删除行的“#”

#default-storage-engine=INNODB -> default-storage-engine=INNODB

并且skip-innodb行添加“#”

skip-innodb -> #skip-innodb

第三: 保存并重启mysql服务,问题解决了。

答案 6 :(得分:0)

我认为有一件重要的事情需要提及:在交易完成后重新启用自动提交。

<menu>
    <menupopup>
        <menuitem label="${each}" forEach="@load(vm.menupoints)" />
    </menupopup>
</menu>

否则,即使没有事务,在禁用SET autocommit = 0; START TRANSACTION; INSERT INTO .. UPDATE <table> .. COMMIT; SET autocommit = 1; 后执行的任何操作都需要您显式提交。

答案 7 :(得分:0)

对于我来说,回滚对于InnoDB引擎也不起作用。
但是在begin;之后添加start transaction;语句即可解决。

这对我有用
SET autocommit = 0;
start transaction;
begin;
-- DML query goes here
rollback;
SET autocommit = 1;

但是

这对我不起作用
SET autocommit = 0;
start transaction;
-- DML query goes here
rollback;
SET autocommit = 1;

真的我不知道原因,如果有人知道,请在这里评论。