- Leituras sujas : ler dados não autorizados de outra transação
- Leituras não repetíveis : leia dados COMMITTED de uma
UPDATE
consulta de outra transação
- O Phantom lê : lê dados COMMITTED de uma
INSERT
ouDELETE
consulta de outra transação
Nota : As instruções DELETE de outra transação também têm uma probabilidade muito baixa de causar leituras não repetíveis em certos casos. Isso acontece quando a instrução DELETE, infelizmente, remove a mesma linha que sua transação atual estava consultando. Mas esse é um caso raro e muito mais improvável de ocorrer em um banco de dados com milhões de linhas em cada tabela. As tabelas que contêm dados de transação geralmente têm alto volume de dados em qualquer ambiente de produção.
Também podemos observar que ATUALIZAÇÕES pode ser um trabalho mais frequente na maioria dos casos de uso do que INSERT ou DELETES reais (nesses casos, o risco de leituras não repetíveis permanece apenas - leituras fantasmas não são possíveis nesses casos). É por isso que as atualizações são tratadas de forma diferente de INSERT-DELETE e a anomalia resultante também é nomeada de maneira diferente.
Também há um custo de processamento adicional associado ao manuseio de INSERT-DELETEs, em vez de apenas manipular as ATUALIZAÇÕES.
- READ_UNCOMMITTED impede nada. É o nível de isolamento zero
- READ_COMMITTED impede apenas um, ou seja, leituras sujas
- REPEATABLE_READ evita duas anomalias: leituras sujas e leituras não repetíveis
- SERIALIZABLE evita todas as três anomalias: leituras sujas, leituras não repetíveis e leituras fantasmas
Por que não definir a transação SERIALIZABLE o tempo todo? Bem, a resposta para a pergunta acima é: A configuração SERIALIZABLE torna as transações muito lentas , o que novamente não queremos.
De fato, o consumo de tempo de transação está na seguinte taxa:
SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
Portanto, a configuração READ_UNCOMMITTED é a mais rápida .
Resumo
Na verdade, precisamos analisar o caso de uso e decidir um nível de isolamento para otimizar o tempo da transação e também evitar a maioria das anomalias.
Observe que os bancos de dados, por padrão, têm a configuração REPEATABLE_READ.