Transactions SQL : quand et pourquoi les utiliser ?
asked a month ago618 viewsfr
Dans mon app de transfert d'argent entre comptes, je fais deux UPDATE (débit puis crédit). Un collègue dit qu'il faut une transaction. Pourquoi ?
AI diagnosis
AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.
1 Answer
Sans transaction, si le serveur plante entre le débit et le crédit, l'argent disparaît. Une transaction garantit que les opérations réussissent toutes ou aucune (atomicité, le « A » d'ACID) :
BEGIN;
UPDATE comptes SET solde = solde - 500 WHERE id = 1 AND solde >= 500;
-- vérifier qu'une ligne a bien été modifiée, sinon ROLLBACK
UPDATE comptes SET solde = solde + 500 WHERE id = 2;
COMMIT;
Points importants pour un cas financier : - La condition AND solde >= 500 dans l'UPDATE évite un solde négatif même avec des requêtes concurrentes. La ligne est verrouillée pendant la mise à jour. - Verrouille toujours les comptes dans le même ordre (par id croissant) pour éviter les interblocages (*deadlocks*). - Enregistre chaque mouvement dans une table mouvements (grand livre) en plus du solde, pour pouvoir auditer.
Avec Prisma : prisma.$transaction(async (tx) => { ... }).
Sign in to tell others whether this worked.
Sign in and verify your email to post an answer.