

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Definição de níveis de isolamento
<a name="transactions-isolation-levels"></a>

O "I" em `ACID` significa *isolamento*. O grau de isolamento de uma transação determina quantas ou quão poucas outras transações simultâneas podem afetar os dados nos quais ela opera.

O [SQL:1992 Standard](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt) criou um vocabulário para descrever níveis de isolamento. Ele define três tipos de interações (que ele chama de *fenômenos*) que podem ocorrer entre duas transações simultâneas, `Tx1` e `Tx2`:
+ `Dirty read`: isso ocorre quando o `Tx1` modifica um item e o `Tx2` lê esse item antes de o `Tx1` ter confirmado a alteração. Portanto, se o `Tx1` nunca conseguir confirmar a alteração, ou revertê-la, o `Tx2` lerá um valor que nunca chegou ao banco de dados.
+ `Non-repeatable read`: isso acontece quando o `Tx1` lê um item, o `Tx2` modifica ou exclui esse item e confirma a alteração e o `Tx1` tenta ler o item novamente. O `Tx1` agora lê um valor diferente do anterior ou descobre que o item não existe mais.
+ `Phantom read`: isso acontece quando o `Tx1` lê um conjunto de itens que satisfazem um critério de pesquisa e, depois, o `Tx2` adiciona um novo item que atende ao critério de pesquisa, e o `Tx1` repete a pesquisa. O `Tx1` agora obtém um conjunto de itens diferente do anterior.

Cada um desses três tipos de interação pode provocar inconsistências nos dados resultantes em um banco de dados.

O SQL:1992 standard definiu quatro níveis de isolamento que têm garantias diferentes em termos dos três tipos de interação e das inconsistências que eles podem produzir. Em todos os quatro níveis, uma transação pode ser garantida para ser executada completamente ou não:
+ `READ UNCOMMITTED`: permite todos os três tipos de interação (ou seja, leituras sujas, leituras não repetíveis e leituras fantasmas).
+ `READ COMMITTED`: leituras sujas não são possíveis, mas leituras não repetíveis e fantasmas são.
+ `REPEATABLE READ`: nem leituras sujas nem leituras não repetíveis são possíveis, mas leituras fantasmas ainda são.
+ `SERIALIZABLE`: nenhum dos três tipos de fenômeno de interação pode ocorrer.

O controle de simultaneidade multiversão (MVCC — multiversion concurrency control) permite outro tipo de isolamento, ou seja, o isolamento *SNAPSHOT* . Isso garante que uma transação opere em um snapshot de dados como ele se encontra quando a transação começa e que nenhuma outra transação possa alterar esse snapshot.