Transactions

Propriétés ACID

Un SGBD doit fournir des mécanismes pour assurer l’intégrité, la confidentialité mais aussi les accès concurrents (autoriser les accès simultanés à la BD par plusieurs utilisateurs) et la sureté de fonctionnement (assurer la cohérence des données en dépit des pannes matérielles et logicielles qui peuvent se produire).

Une transaction est une séquence d’actions à réaliser sur la BD, qui a les propriétés suivantes (ACID):

Atomicité Tout est exécuté ou rien
Cohérence Une transaction fait passer la BD d'un état cohérent à un autre été cohérent
Isolation Les mises à jour faites par une transaction ne sont pas visibles de l'extérieur tant que la transaction n'est pas terminée
Durabilité Les actions effectuées par une transaction terminée sont définitives

Les actions à l’intérieur d’une transaction sont effectuées en mémoire.
Lorsque la transaction atteint son point de validation (COMMIT), les modifications sont enregistrées sur le disque.
Si la transaction est annulée (ROLLBACK), la transaction se supprime en effaçant toute trace de son passage.


Journal

Un point de contrôle est une sauvegarde des modifications de la BD sur le disque.
Le journal est un fichier texte dans lequel le SGBD inscrit dans l’ordre toutes les actions effectuées depuis le dernier point de contrôle.

Quand le système redémarre, il détermine en fonction du contenu du journal l’état des transactions et va automatiquement

Le journal garantit ainsi les propriétés ACID : une transaction laisse toujours la base de données dans un état cohérent même après une panne.


Start transaction

Permet de commencer une transaction

START TRANSACTION

Commit

Valide la transaction en cours — et enregistre donc les modifications en base de données

COMMIT

Rollback

Annule la transaction en cours — et abandonne donc les modifications effectuée depuis le début de la transaction

ROLLBACK

Attention, les actions qui modifient le schéma ne peuvent pas être annulées (create, drop, alter), elles commitent automatiquement la transaction. Liste des requêtes qui commitent automatiquement une transaction.

Exemple

START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

Doc MySQL transactions


Savepoint

Le moteur InnoDB supporte les points de restauration au sein d’une transaction, les savepoints.
Ils permettent de revenir à une étape donnée dans la transaction et d’annuler celles qui ont suivit.

Créer un savepoint

SAVEPOINT identifier

Rollback vers un savepoint

ROLLBACK [WORK] TO [SAVEPOINT] identifier

Supprimer un savepoint

Ni commit ni rollback, supprime juste le savepoint

RELEASE SAVEPOINT identifier

Exemple

START TRANSACTION;
    INSERT INTO matable VALUES (1);
    SAVEPOINT savepoint1; -- création du savepoint1
    INSERT INTO matable VALUES (2);
    SAVEPOINT savepoint2; -- création du savepoint2
    INSERT INTO matable VALUES (3);
    ROLLBACK TO SAVEPOINT savepoint1; -- ROLLBACK TO savepoint1
COMMIT;

SELECT * FROM tmp;
+----+
| id |
+----+
| 1  |
+----+

Doc MySQL savepoints