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