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

bookIsolamento: Níveis Read Committed e Uncommitted

No contexto de bancos de dados, isolamento refere-se à capacidade de um sistema de banco de dados de controlar a visibilidade das alterações feitas por transações concorrentes. Garante que as transações operem de forma independente umas das outras, evitando interferências e mantendo a integridade dos dados.

Existem 4 níveis de isolamento em SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Este é o nível mais baixo de isolamento, onde as transações podem ver alterações feitas por outras transações mesmo antes de serem confirmadas. Esse nível permite leituras sujas (dirty reads), ou seja, uma transação pode ler dados que foram modificados por outra transação, mas ainda não foram confirmados.

Leituras sujas

Implementação

Para especificar o nível de isolamento para a transação, podemos usar o seguinte comando em nossa consulta:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Esta instrução altera o nível de isolamento da transação atual para "Read Uncommitted", permitindo que a transação leia dados modificados por outras transações ainda não confirmadas;

  • este comando deve ser utilizado apenas dentro do bloco da transação! Caso contrário, não terá efeito e será utilizado o nível de isolamento padrão.

Também podemos verificar o nível de isolamento atual utilizando o seguinte comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

O nível de isolamento Read Committed garante que uma transação só veja dados que foram confirmados por outras transações.
Isso significa que alterações não confirmadas feitas por outras transações não ficam visíveis para transações operando sob o isolamento Read Committed.
Como resultado, evita leituras sujas ao permitir que uma transação leia apenas dados confirmados. No entanto, esse nível de transação apresenta problemas com leituras não repetíveis.

Leituras não repetíveis

O nível de isolamento "Read committed" permite leituras não repetíveis porque bloqueia a operação de leitura em valores que estão em transações não confirmadas, mas não bloqueia a operação de escrita.
Como resultado, é possível gravar novos dados na linha que está sendo lida por outra transação.

Atualização perdida

Devido à ausência do bloqueio de escrita, existe mais um problema com o nível de isolamento read committed - atualizações perdidas.

As atualizações perdidas ocorrem quando duas transações paralelas tentam alterar a mesma linha. Como resultado, a transação que é confirmada por último sobrescreve os valores confirmados por outras transações.

Implementação

Também podemos especificar este nível de isolamento utilizando os seguintes comandos:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

É importante observar que Read Committed é o nível de isolamento padrão para a maioria dos Sistemas de Gerenciamento de Banco de Dados, por isso podemos omitir sua especificação.

question mark

Se uma transação lê dados que foram modificados por outra transação ainda não confirmada, que tipo de leitura é essa?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6

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 Read Committed e Uncommitted

Deslize para mostrar o menu

No contexto de bancos de dados, isolamento refere-se à capacidade de um sistema de banco de dados de controlar a visibilidade das alterações feitas por transações concorrentes. Garante que as transações operem de forma independente umas das outras, evitando interferências e mantendo a integridade dos dados.

Existem 4 níveis de isolamento em SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Este é o nível mais baixo de isolamento, onde as transações podem ver alterações feitas por outras transações mesmo antes de serem confirmadas. Esse nível permite leituras sujas (dirty reads), ou seja, uma transação pode ler dados que foram modificados por outra transação, mas ainda não foram confirmados.

Leituras sujas

Implementação

Para especificar o nível de isolamento para a transação, podemos usar o seguinte comando em nossa consulta:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Esta instrução altera o nível de isolamento da transação atual para "Read Uncommitted", permitindo que a transação leia dados modificados por outras transações ainda não confirmadas;

  • este comando deve ser utilizado apenas dentro do bloco da transação! Caso contrário, não terá efeito e será utilizado o nível de isolamento padrão.

Também podemos verificar o nível de isolamento atual utilizando o seguinte comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

O nível de isolamento Read Committed garante que uma transação só veja dados que foram confirmados por outras transações.
Isso significa que alterações não confirmadas feitas por outras transações não ficam visíveis para transações operando sob o isolamento Read Committed.
Como resultado, evita leituras sujas ao permitir que uma transação leia apenas dados confirmados. No entanto, esse nível de transação apresenta problemas com leituras não repetíveis.

Leituras não repetíveis

O nível de isolamento "Read committed" permite leituras não repetíveis porque bloqueia a operação de leitura em valores que estão em transações não confirmadas, mas não bloqueia a operação de escrita.
Como resultado, é possível gravar novos dados na linha que está sendo lida por outra transação.

Atualização perdida

Devido à ausência do bloqueio de escrita, existe mais um problema com o nível de isolamento read committed - atualizações perdidas.

As atualizações perdidas ocorrem quando duas transações paralelas tentam alterar a mesma linha. Como resultado, a transação que é confirmada por último sobrescreve os valores confirmados por outras transações.

Implementação

Também podemos especificar este nível de isolamento utilizando os seguintes comandos:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

É importante observar que Read Committed é o nível de isolamento padrão para a maioria dos Sistemas de Gerenciamento de Banco de Dados, por isso podemos omitir sua especificação.

question mark

Se uma transação lê dados que foram modificados por outra transação ainda não confirmada, que tipo de leitura é essa?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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