2010-11-26 56 views
1

Pourquoi la transaction suivante n'est pas annulée lors de l'utilisation du moteur InnoDB?Les transactions ne sont pas annulées avec 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; 

renvoie 2 au lieu de 0!

Qu'est-ce qui me manque? Pourquoi cela arrive-t-il? Que devrait-on faire pour qu'il se comporte correctement?

Edit:

  • même ne fonctionne pas si je l'utilise start transaction au lieu de begin
  • J'ai essayé avec les deux 5.0.51 et 1.5.49 sur Debian Lenny x86_64.

Réponse:

J'ai réinstallé à partir de zéro DB, y compris le retrait complet des installations précédentes (purge) - et réinstallé depuis le début.

Maintenant ça marche.

Je serais très heureux si quelqu'un peut m'expliquer ce qui s'est mal passé!

+0

où est votre 'START TRANSACTION'? –

Répondre

1

Je ne pense pas qu'il y ait un problème avec votre code. Voici exactement ce code sur MySQL Ver 14,14 Distrib 01/05/44 sur Mac, montrant le résultat que vous attendez:

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> 

Quelle version de MySQL utilisez-vous? Quelle plateforme? Comment entrez-vous ces commandes? Est-il possible que vous entriez chaque commande individuelle dans une nouvelle connexion, par exemple? Cela pourrait expliquer le comportement.

+0

Filaire! 'select version()' donne '5.0.51a-24 + lenny1-log' sur Debian Linux x86 \ _64 et j'ai tapé exactement comme vous l'avez fait (depuis mysql depuis la ligne de commande en utilisant la même connexion) – Artyom

+0

J'ai installé la version' 5.1.49' reste le même résultat. – Artyom

+0

Ok - J'ai supprimé alll l'installation de mysql y compris les bases de données et la configuration et installé de nouvelles ... Maintenant, cela fonctionne. – Artyom

0

Vous avez une instruction START TRANSACTION ou BEGIN pour votre ROLLBACK pour avoir n'importe quel contexte.

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

Je vois votre installation MySQL a été cassé. Content que tu l'aies réparé!

+0

J'ai essayé tous 'start transaction',' begin', 'COMMENCER TRANSACTION AVEC SNAPSHOT CONSISTANT' le résultat le même. J'ai lu ce lien, mais je n'arrive toujours pas à savoir quoi faire. Pouvez-vous s'il vous plaît donner un échantillon? – Artyom

+0

J'ai aussi donné 'begin' dans le code que j'avais donné? – Artyom