回滚在MySQL中不起作用

回滚在MySQL中不起作用,mysql,Mysql,我有一个用户表,我有5条记录 我删除了两条记录,然后执行了rollback命令,它成功地执行了 但这删除了两条未恢复的记录 用户表引擎是 您可以在运行查询之前将自动提交模式设置为禁用 SET autocommit=0; 参考: 确保您已经执行了该命令 start transaction; 在查询之前删除 SET autocommit=0; BEGIN; . . . ROLLBACK; 您应该能够回滚事务,因为表引擎是InnoDB。 无论如何,这里是做交易的正确方式 SET auto

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

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

但这删除了两条未恢复的记录

用户表引擎是

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

SET autocommit=0;
参考:


确保您已经执行了该命令

start transaction;  
在查询之前删除

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

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

无论如何,这里是做交易的正确方式

SET autocommit=0;
START TRANSACTION; 
Your Query here.
ROLLBACK;
并确保在需要回滚的查询之后未使用
COMMIT
。参考
和。当创建DB连接时,默认情况下它处于自动提交模式。这意味着每个单独的SQL语句都被视为一个事务,并在执行后立即自动提交。因此,如果您需要自己进行交易,则必须通过
autocommit=0
关闭自动提交模式。更多信息,请参阅此文件。

我也有同样的问题,但我已经检查了innodb支持

第一: 验证引擎INNODB是否可用:通过以下步骤:

mysql> show engines;
如果INNODB被禁用:则

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

#default-storage-engine=INNODB -> default-storage-engine=INNODB
以及行skip innodb add“#”

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

我不知道您是否锁定了表,但我遇到了相同的问题,回滚似乎不起作用

在我的事务中,我称之为“锁表…”,它

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

()

我最终锁定了事务之外(之前),因为这是我在事务中做的第一件事。或者,您可以按照文档建议执行:

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

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

SET autocommit = 0;
START TRANSACTION;
    INSERT INTO ..
    UPDATE <table> ..
COMMIT;
SET autocommit = 1;
设置自动提交=0;
启动交易;
插入。。
更新。。
犯罪
设置自动提交=1;

否则,在禁用
自动提交
后执行的任何操作,即使没有事务,也需要显式提交

即使对我来说,回滚也不适用于InnoDB引擎。
但是添加
开始启动事务后的code>语句进行了修复

这对我很有效
设置自动提交=0;
启动交易;
开始;
--这里是DML查询
回降;
设置自动提交=1;
但是

这对我不起作用
设置自动提交=0;
启动交易;
--这里是DML查询
回降;
设置自动提交=1;

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

我使用直接启动transac和回滚。但我不使用SET autocommit=0。但对我来说,trasnaction回滚有效。我想知道这组自动提交的目的=0@Bharanikumar:创建数据库连接时,默认情况下它处于自动提交模式。这意味着每个单独的SQL语句都被视为一个事务,并在执行后立即自动提交。因此,如果您需要自己进行交易,则必须通过
设置autocommit=0
关闭自动提交模式。在使用事务之前,您不需要关闭自动提交。看见“要隐式禁用单系列语句的自动提交模式,请使用START TRANSACTION语句。对于START TRANSACTION,自动提交将保持禁用状态,直到您使用COMMIT或ROLLBACK结束事务。然后自动提交模式将恢复到其以前的状态。”您问题的标题非常重要!这听起来像西班牙语,因为MySQL的所有人都在编码时使用兴奋剂,而所有开发人员的最终用户都在使用兴奋剂数据库!。。哈哈,MySQL数据库是个大人物!你不能就这样指责它:)
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;
SET autocommit = 0;
START TRANSACTION;
    INSERT INTO ..
    UPDATE <table> ..
COMMIT;
SET autocommit = 1;