Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Isolamento: Níveis Repeatable Read e Serializable | Acid
Técnicas Avançadas em SQL

bookIsolamento: Níveis Repeatable Read e Serializable

Leitura Repetível

O nível de isolamento Leitura Repetível em bancos de dados garante que, ao iniciar uma transação, você verá um instantâneo do banco de dados que permanece inalterado durante toda a sua tarefa.
Isso significa que, mesmo que outras alterações ocorram no banco de dados enquanto você trabalha, você verá apenas os dados como estavam no início.
Transações sob o isolamento de Leitura Repetível mantêm locks de leitura em todas as linhas que referenciam e locks de escrita nas linhas que inserem, atualizam ou excluem. Isso previne atualizações perdidas, leituras sujas e leituras não repetíveis.
No entanto, há um problema que ainda pode ocorrer ao usar esse tipo de isolamento - o phantom read.

Phantom read

O phantom read pode ocorrer quando uma transação está lendo dados e outra transação adiciona novos registros ao banco de dados. Consequentemente, podemos obter conjuntos de resultados diferentes em duas leituras consecutivas.

Leitura não repetível vs phantom read

A leitura não repetível ocorre quando a mesma consulta executada pelo Usuário A retorna valores diferentes para a mesma linha entre leituras consecutivas, normalmente devido a modificações feitas pelo Usuário B.

O phantom read, por outro lado, acontece quando a mesma consulta executada pelo Usuário A retorna conjuntos diferentes de linhas entre leituras consecutivas, mesmo que as linhas individuais não tenham sido atualizadas.

Podemos especificar esse nível de isolamento em nossa consulta SQL usando o seguinte comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

O nível de isolamento Serializable é o mais alto nível de isolamento em bancos de dados, garantindo a forma mais rigorosa de controle de concorrência.
Nesse nível, as transações são executadas como se fossem processadas em série, uma após a outra, mesmo que possam ser executadas concorrentemente. Isso garante que o resultado das transações seja o mesmo como se fossem executadas em alguma ordem serial, mantendo a consistência e evitando todas as anomalias de concorrência conhecidas.

Note

O uso desse tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.

Podemos usar a seguinte instrução para definir esse nível de isolamento em nossa consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Associe os níveis de isolamento às suas descrições.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Clique ou arraste solte itens e preencha os espaços

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 4.35

bookIsolamento: Níveis Repeatable Read e Serializable

Deslize para mostrar o menu

Leitura Repetível

O nível de isolamento Leitura Repetível em bancos de dados garante que, ao iniciar uma transação, você verá um instantâneo do banco de dados que permanece inalterado durante toda a sua tarefa.
Isso significa que, mesmo que outras alterações ocorram no banco de dados enquanto você trabalha, você verá apenas os dados como estavam no início.
Transações sob o isolamento de Leitura Repetível mantêm locks de leitura em todas as linhas que referenciam e locks de escrita nas linhas que inserem, atualizam ou excluem. Isso previne atualizações perdidas, leituras sujas e leituras não repetíveis.
No entanto, há um problema que ainda pode ocorrer ao usar esse tipo de isolamento - o phantom read.

Phantom read

O phantom read pode ocorrer quando uma transação está lendo dados e outra transação adiciona novos registros ao banco de dados. Consequentemente, podemos obter conjuntos de resultados diferentes em duas leituras consecutivas.

Leitura não repetível vs phantom read

A leitura não repetível ocorre quando a mesma consulta executada pelo Usuário A retorna valores diferentes para a mesma linha entre leituras consecutivas, normalmente devido a modificações feitas pelo Usuário B.

O phantom read, por outro lado, acontece quando a mesma consulta executada pelo Usuário A retorna conjuntos diferentes de linhas entre leituras consecutivas, mesmo que as linhas individuais não tenham sido atualizadas.

Podemos especificar esse nível de isolamento em nossa consulta SQL usando o seguinte comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

O nível de isolamento Serializable é o mais alto nível de isolamento em bancos de dados, garantindo a forma mais rigorosa de controle de concorrência.
Nesse nível, as transações são executadas como se fossem processadas em série, uma após a outra, mesmo que possam ser executadas concorrentemente. Isso garante que o resultado das transações seja o mesmo como se fossem executadas em alguma ordem serial, mantendo a consistência e evitando todas as anomalias de concorrência conhecidas.

Note

O uso desse tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.

Podemos usar a seguinte instrução para definir esse nível de isolamento em nossa consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Associe os níveis de isolamento às suas descrições.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Clique ou arraste solte itens e preencha os espaços

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7
some-alt