

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Definizione dei livelli di isolamento
<a name="transactions-isolation-levels"></a>

La "I" in `ACID` sta per *isolamento*. Il grado di isolamento di una transazione determina quanto o quanto poco altre transazioni simultanee possono influire sui dati su cui opera.

Lo [standard SQL:1992](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt) ha creato un vocabolario per descrivere i livelli di isolamento. Definisce tre tipi di interazioni (che chiama *fenomeni*) che possono verificarsi tra due transazioni simultanee, `Tx1` e `Tx2`:
+ `Dirty read`: si verifica quando `Tx1` modifica un elemento e quindi `Tx2` legge quell'elemento prima che `Tx1` abbia completato la modifica. Pertanto, se `Tx1` non riesce mai a eseguire il commit della modifica o a eseguire il rollback, `Tx2` ha letto un valore che non è mai entrato nel database.
+ `Non-repeatable read`: si verifica quando `Tx1` legge un elemento, quindi `Tx2` modifica o elimina quell'elemento e completa la modifica, quindi `Tx1` tenta di rileggere l'elemento. `Tx1` ora legge un valore diverso rispetto a prima o rileva che l'elemento non esiste più.
+ `Phantom read`: si verifica quando `Tx1` legge un insieme di elementi che soddisfano un criterio di ricerca, quindi `Tx2` aggiunge un nuovo elemento che soddisfa il criterio di ricerca e quindi `Tx1` ripete la ricerca. `Tx1` ora ottiene un insieme di elementi diverso rispetto a prima.

Ognuno di questi tre tipi di interazione può causare incoerenze nei dati risultanti in un database.

Lo standard SQL:1992 ha definito quattro livelli di isolamento che presentano garanzie diverse per quanto riguarda i tre tipi di interazione e le incoerenze che possono produrre. A tutti e quattro i livelli, è possibile garantire che una transazione venga eseguita completamente o non venga eseguita affatto:
+ `READ UNCOMMITTED`: consente tutti e tre i tipi di interazione (ovvero letture dirty, letture non ripetibili e letture fantasma).
+ `READ COMMITTED`: le letture dirty non sono possibili, ma le letture non ripetibili e le letture fantasma lo sono.
+ `REPEATABLE READ`: non sono possibili né le letture dirty né le letture non ripetibili, ma sono ancora possibili le letture fantasma.
+ `SERIALIZABLE`: nessuno dei tre tipi di interazione è possibile.

Multiversion Concurrency Control (MVCC) consente un altro tipo di isolamento, ovvero l'isolamento *SNAPSHOT* . Ciò garantisce che una transazione funzioni su uno snapshot di dati esistente all'inizio della transazione e che nessun'altra transazione possa modificare tale snapshot.