Brigade des Requêtes

Chapitre 10 : BEGIN, COMMIT, ROLLBACK (pour aller plus loin, cours seul)

TCL : gérer les transactions

Que se passe-t-il si la base plante au milieu d'une série de modifications ? Pour que les données restent toujours cohérentes, le TCL, le langage de contrôle des transactions, regroupe plusieurs opérations en un tout indivisible.

Qu'est-ce qu'une transaction ?

Une transaction est un groupe d'opérations traité comme un seul bloc : soit tout réussit, soit rien n'est pris en compte.

Exemple classique, un virement de 100 euros : il faut retirer l'argent du compte 1 et le déposer sur le compte 2. Si la base plante entre les deux opérations, l'argent ne doit pas disparaître !

BEGIN, COMMIT et ROLLBACK

COMMIT : valider la transaction
BEGIN;
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT;
ROLLBACK : annuler la transaction
BEGIN;
DELETE FROM comptes WHERE id = 1;
-- oups, ce n'était pas le bon compte
ROLLBACK;
  • BEGIN ouvre une transaction ;
  • COMMIT valide toutes les opérations, de façon définitive ;
  • ROLLBACK annule tout ce qui a été fait depuis le BEGIN.

Les propriétés ACID

Un SGBD sérieux garantit quatre propriétés, résumées par le sigle ACID.

PropriétéGarantie
Atomicitétout ou rien : une transaction n'est jamais appliquée à moitié
Cohérenceles règles de la base (clés, contraintes) sont respectées avant et après
Isolationdes transactions simultanées ne se perturbent pas entre elles
Durabilitéune fois validée, la modification survit à une panne

Aller plus loin : les points de sauvegarde

Dans une longue transaction, un SAVEPOINT pose un repère : on peut revenir à ce point sans tout annuler.

Annuler seulement la fin de la transaction
BEGIN;
INSERT INTO scelles (objet) VALUES ('Collier');
SAVEPOINT apres_collier;
INSERT INTO scelles (objet) VALUES ('Faux passeport');
ROLLBACK TO apres_collier;  -- le passeport est annulé, le collier est gardé
COMMIT;

Chapitre 9 | Chapitre 11