Aller au contenu

Transactions — Bonnes pratiques#

courant

  • Grouper les écritures multiples dans une transaction explicite (BEGIN / COMMIT) : évite le coût d'un fsync par instruction.
  • Utiliser BEGIN IMMEDIATE pour les écritures concurrentes afin d'éviter les erreurs SQLITE_BUSY tardives.
  • Activer le mode WAL pour de meilleures performances en lecture/écriture concurrentes.
  • Utiliser des SAVEPOINT pour des rollbacks partiels imbriqués.
  • Toujours vérifier le code retour / gérer les erreurs (SQLITE_BUSY, SQLITE_LOCKED).
PRAGMA journal_mode = WAL;

BEGIN IMMEDIATE;
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT;

Gestion des erreurs avec SAVEPOINT#

SAVEPOINT op;
INSERT INTO etudiants (nom) VALUES ('Alice');
-- en cas d'erreur applicative :
ROLLBACK TO op;
RELEASE op;

SQLite

Un seul writer à la fois même en WAL (les lecteurs ne bloquent pas l'écrivain, mais les écrivains restent sérialisés). Timeout configurable avec PRAGMA busy_timeout = ms;.