2010-11-26 96 views
1

为什么在使用InnoDB引擎时以下事务不回滚?事务不回滚与MySQL/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的莱尼x86_64的两个5.0.51及49年5月1日试不起作用。

答:

我从划痕重新安装DB包括全面清除原有设备(清洗) - 并且从一开始就重新安装。

现在,它的工作。

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

+0

你的`START TRANSACTION`在哪里? – 2010-11-26 22:55:16

回答

1

我不认为你的代码有什么问题。这也正是在Mac上的MySQL版本14.14 DISTRIB 44年5月1日的代码,显示你期待的结果:

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您使用的是?什么平台?你如何输入这些命令?例如,是否可以在新连接中输入每个单独的命令?这可能可以解释这种行为。

0

您错过了 START TRANSACTIONBEGIN声明为您的 ROLLBACK有任何上下文。

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

我看到你的MySQL安装被打破。很高兴你解决它!

+0

我尝试了所有`开始事务`,`开始`,`开始事务与一致的SNAPSHOT`结果相同。我读过这个链接,但仍然无法弄清楚该怎么做。你能给我一个样品吗? – Artyom 2010-11-27 07:41:25

+0

另外我在给出的代码中给了`begin`? – Artyom 2010-11-27 07:42:15