

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Définition des niveaux d'isolement
<a name="transactions-isolation-levels"></a>

Le « I » dans `ACID` signifie *isolation*. Le degré d'isolement d'une transaction détermine dans quelle mesure les autres transactions simultanées peuvent affecter les données sur lesquelles elle opère.

La [norme SQL:1992](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt) a créé un glossaire pour décrire les niveaux d'isolement. Elle définit trois types d'interactions (que l'on appelle des *phénomènes*) qui peuvent se produire entre deux transactions simultanées, `Tx1` et `Tx2` :
+ `Dirty read` : se produit lorsque `Tx1` modifie un élément, puis que `Tx2` lit cet élément avant que `Tx1` n'ait validé la modification. Ensuite, si `Tx1` ne réussit jamais à valider la modification ou l'annule, `Tx2` a lu une valeur qui n'est jamais parvenue à la base de données.
+ `Non-repeatable read` : se produit lorsque `Tx1` lit un élément, puis que `Tx2` modifie ou supprime cet élément et valide la modification, et que `Tx1` essaie de relire l'élément. `Tx1` lit alors une valeur différente de la valeur précédente ou constate que l'élément n'existe plus.
+ `Phantom read` : se produit lorsque `Tx1` lit un ensemble d'éléments qui répondent à un critère de recherche, puis que `Tx2` ajoute un nouvel élément qui répond au critère de recherche et que `Tx1` répète la recherche. `Tx1` obtient alors un ensemble d'éléments différent de celui obtenu auparavant.

Chacun de ces trois types d'interaction peut entraîner des incohérences dans les données de résultat d'une base de données.

La norme SQL:1992 définit quatre niveaux d'isolement qui présentent des garanties différentes concernant ces trois types d'interaction et les incohérences qu'ils peuvent produire. À ces quatre niveaux, une transaction peut avoir la garantie de s'exécuter complètement ou de ne pas s'exécuter du tout :
+ `READ UNCOMMITTED` : autorise les trois types d'interaction, c'est-à-dire les lectures corrompues (dirty read), les lectures non reproductibles (non-repeatable read) et les lectures fantôme (t=phantom read).
+ `READ COMMITTED` : les lectures corrompues ne sont pas possibles, mais les lectures non reproductibles et fantôme le sont.
+ `REPEATABLE READ` : ni les lectures corrompues ni les lectures non reproductibles ne sont possibles, mais les lectures fantôme le sont encore.
+ `SERIALIZABLE` : aucun des trois types de phénomène d'interaction ne peut se produire.

Le contrôle de simultanéité multiversion (MVCC) permet un autre type d'isolement, à savoir l'isolement *SNAPSHOT* . Cela garantit qu'une transaction s'exécute sur un instantané des données telles qu'elles existent lorsque la transaction commence, et qu'aucune autre transaction ne peut modifier cet instantané.