Транзакции не откатываются с MySQL / InnoDB - PullRequest
1 голос
/ 27 ноября 2010

Почему следующая транзакция не откатывается при использовании движка 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!

Что мне не хватает? Почему это происходит? Что нужно сделать, чтобы заставить его вести себя правильно?

Edit:

  • То же не работает, если я использую start transaction вместо begin
  • Я пробовал как с 5.0.51, так и с 5.1.49 на Debian Lenny x86_64.

Ответ:

Я переустановил с нуля БД, включая полное удаление предыдущих установок (очистка), - и переустановил с самого начала.

Теперь это работает.

Я был бы очень рад, если бы кто-нибудь объяснил мне, что пошло не так!

Ответы [ 2 ]

1 голос
/ 27 ноября 2010

Не думаю, что с вашим кодом что-то не так. Вот именно этот код на MySQL Ver 14.14 Distrib 5.1.44 на Mac, показывающий ожидаемый результат:

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 голосов
/ 27 ноября 2010

Вам не хватает оператора START TRANSACTION или BEGIN, чтобы ваш ROLLBACK имел какой-либо контекст.

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

Я вижу, что ваша установка MySQLсломана.Рад, что вы это исправили!

...