Transactions — Bonnes pratiques#
courant
- Grouper les écritures multiples dans une transaction explicite (
BEGIN/COMMIT) : évite le coût d'unfsyncpar instruction. - Utiliser
BEGIN IMMEDIATEpour les écritures concurrentes afin d'éviter les erreursSQLITE_BUSYtardives. - Activer le mode
WALpour de meilleures performances en lecture/écriture concurrentes. - Utiliser des
SAVEPOINTpour 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;.