2017-06-16 5 views
1

Version du serveur: 5.7.17 MySQL Community Server (GPL)MySQL commet une transaction en cas d'échec avec la création de la table

Voici mon exemple. J'ai deux tables.

CREATE TABLE a (id INT PRIMARY KEY); 
CREATE TABLE b (id INT PRIMARY KEY); 

Maintenant, je fais mon opération:

START TRANSACTION; 
INSERT INTO `a` VALUE (1); 
CREATE TABLE b (id INT PRIMARY KEY); 

Bien sûr, j'attendre à ce que la déclaration 3 (CRATE TABLE 'b') échouera car la table existe déjà. Et c'est le cas. Le problème, qu'il n'insère aussi bien, ce qui ne devrait pas avant de courir

COMMIT; 

Il n'y a aucun moyen de rollback transaction - enregistrement « 1 » dans la table « un » reste en place.

Avez-vous des idées ou des idées pour éviter un tel comportement? J'ai également remarqué que lorsque je fais intentionnellement une erreur de syntaxe dans CREATE TABLE STATEMENT, il échoue comme prévu, mais l'enregistrement dans 'a' n'est pas créé.

Répondre

1

Il existe un certain nombre d'instructions qui provoquent une validation implicite. CREATE TABLE en fait partie.

Plus d'info: https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

Peut-être How to prevent mysql implicit commit peut aider un peu.

+0

Merci pour la référence et l'explication. Connaissez-vous un moyen de verrouiller la base de données pendant l'exécution pour assurer la cohérence? – Alexey

+0

Ajout d'un lien vers https://stackoverflow.com/questions/16221993/how-to-prevent-mysql-implicit-commit pourrait aider. – swa66