Isolamento: 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.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 4.35
Isolamento: 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.
Obrigado pelo seu feedback!