Skip to content

Les transactions

Une transaction est un mécanisme permettant de regroupper plusieurs requetes sous forme logique. Si une erreur parvient lors de l’execution, aucune requête n’est effectuée.

Une transaction permet d’atteindre deux des points de la norme ACID (Atomicité et Isolation). Les transactions sont disponibles pour les moteurs de stockages suivants :

  • InnoDB
  • BerckleyDB
  • FalconDB
  • DB

Syntaxe

Une transaction débute toujours par : START TRANSACTION

Pour sauvegarder une transaction, on utilisera : COMMIT

Pour revenir en cas d’erreur, on utilisera ROLLBACK

Attention : Un rollback permet de revenir à un état après un COMMIT.

Le rollback ne peut s’utiliser uniquement pour les DML

Comportements chez InnoDB

Chaque requête est placée sous transaction. Pour gagner en performance, il faut désactiver AUTOCOMMIT ( SET AUTOCOMMIT=0 )

Attention, si on démarre une transaction sans la valider, les autres utilisateurs ne verront pas la modification. Cependant, la personne executant la requete la verra.

mysql> START TRANSACTION; INSERT INTO t_innodb(v1,v2) VALUES ('b',2); ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

mysql> SELECT * FROM t_innodb;
+------+------+
| v1   | v2   |
+------+------+
| a    |    1 |
| a    |    1 |
+------+------+
2 rows in set (0.00 sec)

//
mysql> START TRANSACTION; TRUNCATE t_innodb; ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

Query OK, 3 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM t_innodb;
Empty set (0.00 sec)

mysql>