事务不会使用MySQL / InnoDB回滚

时间:2010-11-26 22:41:59

标签: mysql transactions innodb

为什么在使用InnoDB引擎时不会回滚以下事务?

create table test ( i integer ) Engine = InnoDB;
begin;
insert into test(i) values(10);
insert into test(i) values(20);
rollback;
select count(*) from test;

返回2而不是0!

我想念什么?为什么会这样?应该怎样做才能使其正常运作?

修改

  • 如果我使用start transaction代替begin
  • ,则同样不起作用
  • 我在Debian Lenny x86_64上尝试过5.0.51和5.1.49。

答案:

我从头开始重新安装数据库,包括完全删除以前的安装(清除) - 并从头开始重新安装。

现在可行。

如果有人能解释我出了什么问题,我会很高兴的!

2 个答案:

答案 0 :(得分:1)

我认为您的代码没有任何问题。这正是Mac上的MySQL Ver 14.14 Distrib 5.1.44上的代码,显示了您期望的结果:

mysql> create table test (i integer) Engine = InnoDB;
Query OK, 0 rows affected (0.10 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test(i) values(10);
Query OK, 1 row affected (0.01 sec)

mysql> insert into test(i) values(20);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.01 sec)

mysql> 

您使用的是哪个版本的MySQL?什么平台?你是如何输入这些命令的?例如,您是否可以在新连接中输入每个单独的命令?这可能解释了这种行为。

答案 1 :(得分:0)

您错过了START TRANSACTIONBEGIN声明ROLLBACK有任何背景信息。

<击> http://dev.mysql.com/doc/refman/5.0/en/commit.html

我看到您的MySQL安装已损坏。很高兴你修好了!