Transactions SQL : quand et pourquoi les utiliser ?

posée a month ago622 vuesfr

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 ?

Diagnostic IA

Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.

1 réponse

9
✓
✓ Réponse acceptée

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

Connectez-vous pour dire si ça a marché.

answered a month ago

Sign in and verify your email to post an answer.