Transactions SQL : quand et pourquoi les utiliser ?

poze a month ago617 gadefr

7

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 ?

Dyagnostik IA

Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.

1 Repons

9
✓
✓ Repons yo aksepte

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) => { ... }).

Konekte pou di lòt moun si li te mache.

answered a month ago

Sign in and verify your email to post an answer.