🔒 Connexion

Base de données

Les transactions SQL : COMMIT, ROLLBACK et SAVEPOINT expliqués

14 septembre 2026 · par Romain RICHER

Imaginez un virement bancaire : on retire 100 € d’un compte, on les ajoute à un autre. Que se passe-t-il si le système plante entre les deux opérations ? L’argent aurait disparu du premier compte sans arriver sur le second. C’est précisément ce que les transactions SQL empêchent : elles regroupent plusieurs opérations en un tout indivisible, qui réussit complètement ou échoue complètement. Ce guide explique COMMIT, ROLLBACK et SAVEPOINT, les trois commandes qui les pilotent.

Qu’est-ce qu’une transaction ?

Une transaction est un ensemble d’opérations traité comme une seule unité. Tant qu’elle n’est pas validée, ses modifications sont provisoires : on peut les confirmer ou les annuler en bloc. Ce comportement repose sur quatre propriétés, résumées par l’acronyme ACID :

  • Atomicité : tout ou rien. Soit toutes les opérations réussissent, soit aucune n’est appliquée.
  • Cohérence : la base passe d’un état valide à un autre état valide, sans rompre les règles (contraintes, clés…).
  • Isolation : les transactions concurrentes ne se marchent pas dessus.
  • Durabilité : une fois validée, la modification est permanente, même en cas de panne.

COMMIT : valider les changements

COMMIT confirme définitivement toutes les modifications effectuées depuis le début de la transaction. Avant le COMMIT, rien n’est gravé : les autres utilisateurs ne voient pas encore vos changements, et vous pouvez encore tout annuler. Reprenons le virement :

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT;

Les deux UPDATE sont d’abord provisoires. Le COMMIT les valide ensemble : le virement devient définitif, et de façon atomique. Si un problème survient avant le COMMIT, aucune des deux lignes n’est modifiée durablement.

ROLLBACK : annuler les changements

ROLLBACK fait l’inverse : il annule toutes les modifications depuis le début de la transaction, ramenant la base à son état initial. Utile en cas d’erreur détectée, ou de condition non remplie :

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
-- On s'aperçoit que le compte 1 n'a pas les fonds suffisants
ROLLBACK;

Ici, le retrait est annulé : le solde du compte 1 revient à sa valeur d’origine, comme si l’UPDATE n’avait jamais eu lieu. C’est le filet de sécurité par excellence — tester une opération, et faire marche arrière si le résultat ne convient pas.

SAVEPOINT : annuler partiellement

Parfois, on ne veut pas tout annuler, mais seulement revenir à un point intermédiaire. Un SAVEPOINT pose un repère dans la transaction, vers lequel on pourra revenir sans annuler ce qui précède :

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
SAVEPOINT apres_retrait;

UPDATE comptes SET solde = solde + 100 WHERE id = 2;
-- Problème sur le compte 2 : on revient au savepoint
ROLLBACK TO apres_retrait;

-- Le retrait (compte 1) est conservé, seul le second UPDATE est annulé
COMMIT;

ROLLBACK TO apres_retrait annule uniquement ce qui a été fait après le savepoint. Le premier UPDATE reste en place, et le COMMIT final le valide. Les savepoints sont précieux dans les traitements longs, où l’on veut pouvoir défaire une étape sans tout recommencer.

Validation automatique ou manuelle ?

Un point qui surprend souvent : le comportement par défaut varie selon le SGBD.

  • Oracle n’auto-valide pas : vos modifications restent provisoires jusqu’à un COMMIT explicite (ou sont annulées si vous vous déconnectez sans valider).
  • MySQL (et beaucoup d’outils) sont en mode autocommit par défaut : chaque instruction est validée immédiatement. Pour grouper des opérations, il faut ouvrir explicitement une transaction avec START TRANSACTION (ou BEGIN).

D’où l’importance de connaître le mode de votre environnement : sur un système en autocommit, un ROLLBACK arrivera trop tard si les instructions ont déjà été validées une à une.

Un exemple complet

START TRANSACTION;                                  -- ouvre la transaction

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;

-- Tout s'est bien passé : on valide
COMMIT;

-- (En cas de problème, on aurait écrit ROLLBACK; à la place)

Ce schéma — ouvrir, modifier, puis valider ou annuler — est le motif fondamental de toute opération critique en base de données.

En résumé

Une transaction regroupe des opérations en une unité atomique, régie par les propriétés ACID. COMMIT valide définitivement, ROLLBACK annule tout, et SAVEPOINT permet un retour partiel à un repère intermédiaire. Attention au mode de validation (manuel sur Oracle, autocommit sur MySQL par défaut). Maîtriser les transactions, c’est garantir l’intégrité de vos données lors d’opérations sensibles — un savoir-faire indispensable dès qu’une base est modifiée par plusieurs opérations liées. Pour aller plus loin, voyez les requêtes SQL essentielles et les erreurs Oracle courantes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les commentaires sont modérés avant publication.