0Pricing
SQL Interview Prep · Leçon

Les quatre niveaux d’isolation

De Read Uncommitted à Serializable et ce que chacun autorise

Les quatre niveaux d’isolation est une leçon SQL Interview Prep 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 Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

La question derrière la question

Lorsqu'un recruteur vous demande de « nommer les quatre niveaux d'isolation », le véritable objectif est de vérifier que vous pouvez expliquer le compromis : une isolation plus forte signifie moins d'anomalies, mais aussi une concurrence plus faible.

La norme SQL définit quatre niveaux, classés du plus faible au plus fort :

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

Chaque niveau autorise ou interdit un ensemble précis d'anomalies de lecture. Cette leçon présente les niveaux ; la suivante détaille les anomalies.

Définir le niveau d'isolation

Vous définissez l'isolation par transaction ou par session. La syntaxe est presque identique selon les moteurs.

Si vous ne la définissez pas, chaque base de données possède une valeur par défaut. Connaître ces valeurs par défaut est une question fréquente en entretien ; nous les présenterons donc à la fin.

-- Per transaction (standard SQL)
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- ... statements ...
COMMIT;

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

Niveau 1 : READ UNCOMMITTED

READ UNCOMMITTED est le niveau le plus faible. Une transaction peut lire des lignes qu'une autre transaction a modifiées mais pas encore validées. On appelle cela des lectures sales.

Si cette autre transaction est ensuite annulée, vous avez lu des données qui n'ont officiellement jamais existé. C'est dangereux pour tout ce qui doit être exact.

Remarque : Postgres traite READ UNCOMMITTED comme READ COMMITTED et n'effectue donc jamais réellement de lectures sales. SQL Server et MySQL, eux, respectent ce niveau.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
-- may see another transaction's uncommitted (dirty) rows
SELECT balance FROM accounts WHERE id = 1;
COMMIT;

Niveau 2 : READ COMMITTED

READ COMMITTED garantit que vous ne lisez que des données validées. Aucune lecture sale.

Cependant, chaque instruction voit l'instantané validé le plus récent. Si vous exécutez deux fois la même requête dans une transaction, une autre transaction validée entre-temps peut modifier le résultat. Cette anomalie est une lecture non répétable.

C'est la valeur par défaut dans Postgres, Oracle et SQL Server, et c'est un compromis raisonnable pour la plupart des applications.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- returns 500
-- another transaction commits an update to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- may now return 700
COMMIT;

Niveau 3 : REPEATABLE READ

REPEATABLE READ garantit que si vous lisez deux fois une ligne dans la même transaction, vous obtenez deux fois la même valeur. Un instantané cohérent est pris au début de la transaction.

Ce niveau empêche les lectures sales et les lectures non répétables. La norme autorise néanmoins les lectures fantômes : de nouvelles lignes correspondant à votre clause WHERE qui apparaissent lors d'une nouvelle exécution de la requête.

Important : il s'agit de la valeur par défaut dans MySQL/InnoDB, et l'implémentation d'InnoDB bloque également la plupart des lectures fantômes grâce aux verrous de clé suivante.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- 500
-- another transaction commits a change to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- still 500 in this txn
COMMIT;

Niveau 4 : SERIALIZABLE

SERIALIZABLE est le niveau le plus strict. La base de données garantit que le résultat de l'exécution concurrente de transactions est identique à celui obtenu si elles s'étaient exécutées l'une après l'autre dans un ordre séquentiel donné.

Ce niveau empêche les lectures sales, les lectures non répétables et les lectures fantômes. Le coût : davantage de verrous ou, dans Postgres, des annulations pour échec de sérialisation que vous devez réessayer.

Formulation pour un entretien : « SERIALIZABLE donne l'illusion que chaque transaction s'est exécutée seule, au prix d'une concurrence réduite et de nouvelles tentatives éventuelles. »

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
INSERT INTO audit (total) VALUES (...);
COMMIT;  -- may raise a serialization_failure you retry

La matrice des anomalies

La chose la plus utile à mémoriser est l'anomalie autorisée par chaque niveau. « Oui » signifie que l'anomalie peut se produire.

  • READ UNCOMMITTED : lecture sale=Oui, lecture non répétable=Oui, lecture fantôme=Oui
  • READ COMMITTED : lecture sale=Non, lecture non répétable=Oui, lecture fantôme=Oui
  • REPEATABLE READ : lecture sale=Non, lecture non répétable=Non, lecture fantôme=Oui (selon la norme)
  • SERIALIZABLE : lecture sale=Non, lecture non répétable=Non, lecture fantôme=Non

Chaque niveau supplémentaire interdit une anomalie de plus. Cette progression constitue toute la réponse.

Norme et implémentations réelles

Une distinction de niveau avancé : la norme SQL définit les niveaux selon les anomalies qu'ils doivent empêcher, et non selon la manière de les empêcher. Les moteurs réels empêchent souvent davantage d'anomalies.

  • Postgres REPEATABLE READ utilise l'isolation par instantané et bloque également les lectures fantômes, mais peut toujours rencontrer une anomalie de divergence d'écriture.
  • MySQL/InnoDB REPEATABLE READ bloque les lectures fantômes grâce au verrouillage par clé suivante.
  • Postgres SERIALIZABLE utilise SSI (isolation par instantané sérialisable) et annule les transactions en cas de conflit plutôt que de recourir à un verrouillage lourd.

Le préciser montre que vous savez que la norme constitue un minimum, et non la description exacte du comportement.

Niveaux par défaut selon le moteur

Les valeurs par défaut reviennent sans cesse. Mémorisez-les :

  • PostgreSQL : READ COMMITTED
  • Oracle : READ COMMITTED (aucune lecture sale)
  • SQL Server : READ COMMITTED
  • MySQL (InnoDB) : REPEATABLE READ

L'exception de MySQL est un piège classique. Si l'on vous demande « quel est le niveau d'isolation par défaut ? », commencez toujours par préciser le moteur.

Choisir un niveau en pratique

Comment décider ? Présentez-le comme un compromis entre le risque et le débit.

  • Utilisez READ COMMITTED pour les traitements OLTP courants ; il est rapide et évite les lectures sales.
  • Utilisez REPEATABLE READ lorsqu'une transaction lit plusieurs fois les mêmes données et qu'elles doivent rester stables (rapports, calculs en plusieurs étapes).
  • Utilisez SERIALIZABLE pour une logique où l'exactitude est critique et où aucune anomalie n'est acceptable, et prévoyez une logique de nouvelle tentative en cas d'annulation.

N'utilisez presque jamais READ UNCOMMITTED en production.

Questions de suivi courantes

Après avoir énuméré les niveaux, les recruteurs enchaînent avec des questions rapides. Préparez des réponses concises :

  • « Quel niveau empêche les lectures sales tout en autorisant les lectures non répétables ? » READ COMMITTED.
  • « Quelle est la seule anomalie que REPEATABLE READ autorise encore selon la norme ? » Les lectures fantômes.
  • « Pourquoi ne pas toujours utiliser SERIALIZABLE ? » Il réduit la concurrence et peut imposer de nouvelles tentatives en cas d'échec de sérialisation.
  • « Un niveau plus élevé coûte-t-il plus cher ? » Oui, sous forme de verrouillage ou de surcoût lié aux annulations et aux nouvelles tentatives.

Répondre instantanément à ces questions prouve que vous avez assimilé la progression, au lieu de l'avoir simplement mémorisée.

Vérification rapide

L'une de ces informations sur les niveaux par défaut est particulièrement souvent évaluée.

Récapitulatif : quatre niveaux, un compromis

Les quatre niveaux d'isolation forment une progression du plus faible au plus fort : READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Chaque niveau supplémentaire interdit une anomalie de plus (lecture sale, lecture non répétable, lecture fantôme), au prix d'une concurrence réduite.

Retenez les valeurs par défaut (READ COMMITTED partout sauf REPEATABLE READ dans MySQL) et notez que les moteurs réels empêchent souvent davantage d'anomalies que ce qu'exige la norme. Dans la prochaine leçon, nous examinerons les trois anomalies de lecture que ces niveaux sont conçus pour empêcher.

Questions Fréquemment Posées

La leçon « Les quatre niveaux d’isolation » est-elle gratuite ?

Oui — le texte complet de « Les quatre niveaux d’isolation » 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 Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Les quatre niveaux d’isolation » ?

De Read Uncommitted à Serializable et ce que chacun autorise Tu pratiques SQL Interview Prep 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 Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep 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 « Les quatre niveaux d’isolation » ?

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 Interview Prep ?

Oui. Chaque leçon SQL Interview Prep 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. Les propriétés ACID expliquées
  2. Les quatre niveaux d’isolation
  3. Lectures sales, non répétables et fantômes
  4. Interblocages, verrous et MVCC
← Retour à SQL Interview Prep