Quais níveis de isolamento de transações em bancos de dados você conhece?
sobes.tech IA
Resposta da IA
No padrão SQL, são definidos quatro níveis de isolamento de transações: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: O nível mais baixo. A transação pode ler dados que ainda não foram confirmados (ou seja, realizados por outra transação que ainda não terminou com
COMMIT). Isso leva a leituras "sujas" (dirty reads). -
Read Committed: A transação vê apenas os dados que foram confirmados antes ou durante sua execução. Impede leituras "sujas", mas permite leituras não repetidas (non-repeatable reads) e fantasmas (phantom reads).
- Leituras não repetidas: A mesma leitura dentro de uma transação pode retornar dados diferentes porque outra transação os modificou e confirmou entre as leituras.
- Fantasmas: Ao executar uma consulta com condição
WHERE, outra transação adiciona ou remove linhas que atendem à condição, e a mesma consulta executada novamente na mesma transação retorna um conjunto diferente de linhas.
-
Repeatable Read: A transação vê apenas os dados que foram confirmados antes de seu início. Garante que as mesmas leituras das mesmas linhas em uma transação retornarão os mesmos dados. Impede leituras "sujas" e não repetidas. Permite fantasmas.
// Exemplo de Repeatable Read // Transação 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Por exemplo, 100 // Transação 2 (executando simultaneamente) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Novo usuário', 'active'); // COMMIT; // Transação 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Ainda 100 (fantasma) // COMMIT; -
Serializable: O nível mais alto de isolamento. Garante que a execução paralela de transações será equivalente a alguma execução sequencial dessas transações. Impede leituras "sujas", não repetidas e fantasmas. Pode levar à redução de desempenho devido a bloqueios.
Em diferentes SGBDs, podem existir suas próprias implementações e características dos níveis de isolamento, bem como níveis adicionais. Por exemplo, no MySQL InnoDB, o padrão é Repeatable Read.