Aller au contenu principal
ShadowAcademy

Les langages SQL Modifier les données

Les transactions

Un virement, c'est deux écritures : débiter un compte, créditer l'autre.

UPDATE clients SET courant = courant - 100 WHERE id = 1;
UPDATE clients SET courant = courant + 100 WHERE id = 3;

Si le serveur s'arrête entre les deux, l'argent a disparu.

Tout, ou rien

BEGIN;
UPDATE clients SET courant = courant - 100 WHERE id = 1;
UPDATE clients SET courant = courant + 100 WHERE id = 3;
COMMIT;

Entre BEGIN et COMMIT, les modifications sont en attente ; COMMIT les valide ensemble. Si tout s'arrête au milieu, la base retrouve son état d'avant.

Oublier le COMMIT

L'erreur classique : un BEGIN sans COMMIT laisse la transaction ouverte. Rien n'est enregistré, et la table reste verrouillée pour les autres. Une transaction se referme toujours, par COMMIT ou ROLLBACK.

Annuler volontairement

ROLLBACK annule tout depuis le BEGIN. C'est le seul filet de sécurité de SQL en écriture, et il n'existe que si l'on a ouvert une transaction.

Toutes les bibliothèques savent le faire (PHP, Python, JavaScript, Java...) : dès que deux écritures doivent aller ensemble, elles vont dans une transaction.

1 exercice pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • Le virement difficile lecon a valider