0Pricing
SQL Academy · Leçon

Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE

Comparez les niveaux d’isolation de la norme SQL, leur implémentation dans PostgreSQL et choisissez le niveau adapté à votre charge de travail.

Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Les quatre niveaux standard

La norme SQL définit quatre niveaux d’isolation :

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

PostgreSQL en implémente trois (READ UNCOMMITTED se comporte comme READ COMMITTED).

READ COMMITTED (valeur par défaut de PostgreSQL)

Chaque instruction voit les données validées avant le début de l’instruction. Vous pouvez voir des instantanés différents au sein d’une même transaction.

-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- 200  (non-repeatable read)

REPEATABLE READ (isolation par instantané)

Ce niveau utilise un instantané pris au début de la transaction. La relecture d’une même ligne renvoie toujours la même valeur. Le niveau REPEATABLE READ de PostgreSQL empêche également les lectures fantômes.

BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- still 100
COMMIT;

SERIALIZABLE

Le niveau le plus strict : les transactions se comportent comme si elles s’exécutaient l’une après l’autre. PostgreSQL utilise l’isolation par instantané sérialisable (SSI) : il détecte les dépendances concurrentes et interrompt les transactions en conflit :

BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependencies

Définir le niveau d’isolation

Par transaction, par session ou globalement :

-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';

-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'

Anomalies autorisées selon le niveau

NiveauNon validéeNon répétableFantôme
READ UNCOMMITTEDpeut-êtrepeut-êtrepeut-être
READ COMMITTEDnonpeut-êtrepeut-être
REPEATABLE READnonnonnon (dans PG)
SERIALIZABLEnonnonnon

Compromis de performance

  • READ COMMITTED — surcharge minimale, valeur par défaut
  • REPEATABLE READ — même plan, cohérence de l’instantané, aucune baisse de performances sauf en cas de conflits d’écriture
  • SERIALIZABLE — suivi supplémentaire, possibilité d’interrompre des transactions ; une logique de nouvelle tentative est nécessaire dans l’application

Schéma de nouvelle tentative pour SERIALIZABLE

SERIALIZABLE peut interrompre la transaction avec le code 40001. Réessayez dans une boucle :

for (let i = 0; i < 3; i++) {
  try {
    await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
    // ... work ...
    await client.query('COMMIT');
    break;
  } catch (e) {
    if (e.code === '40001') continue;
    throw e;
  }
}

Lire un instantané cohérent

Pour les requêtes analytiques de longue durée qui nécessitent des données cohérentes, REPEATABLE READ offre le meilleur équilibre.

Comportement en cas de conflit d’écriture

Si deux transactions modifient la même ligne :

  • READ COMMITTED — la seconde attend, relit ensuite la nouvelle ligne et réessaie
  • REPEATABLE READ — la seconde est interrompue avec « impossible de sérialiser » — l’application doit réessayer

Choisir le bon niveau

Règles générales :

  • OLTP — READ COMMITTED (valeur par défaut)
  • Rapports nécessitant de la cohérence — REPEATABLE READ
  • Argent / stocks — SERIALIZABLE + nouvelle tentative, OU verrous explicites (FOR UPDATE)

Les verrous explicites sont parfois préférables à l’isolation

Souvent, SELECT ... FOR UPDATE avec READ COMMITTED est plus simple que SERIALIZABLE pour une seule ligne très sollicitée.

Récapitulatif

Les niveaux d’isolation échangent sûreté et concurrence.

  • READ COMMITTED est la valeur par défaut
  • REPEATABLE READ pour des lectures cohérentes
  • SERIALIZABLE pour un comportement « comme en série » — nécessite une logique de nouvelle tentative

Vérification rapide

Quel est le niveau d’isolation par défaut de PostgreSQL ?

Questions Fréquemment Posées

La leçon « Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE » est-elle gratuite ?

Oui — le texte complet de « Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE » ?

Comparez les niveaux d’isolation de la norme SQL, leur implémentation dans PostgreSQL et choisissez le niveau adapté à votre charge de travail. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Propriétés ACID et anomalies
  2. Niveaux d’isolation : READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Interblocages : détection et prévention
  4. Verrouillage optimiste ou pessimiste
← Retour à SQL Academy