Junior — Middle
Poderia explicar o que se entende por leitura fantasma no contexto de transações e bancos de dados?
sobes.tech IA
Resposta da IA
Leitura fantasma é uma situação em transações onde, ao reexecutar a mesma consulta dentro de uma transação, novas linhas aparecem que não estavam visíveis na primeira leitura.
Exemplo:
- A transação T1 executa a consulta
SELECT * FROM orders WHERE status = 'new'e obtém 5 registros. - Enquanto T1 não termina, outra transação T2 adiciona um novo registro com
status = 'new'e faz commit das alterações. - Se T1 repetir a mesma consulta, verá já 6 registros — a nova linha que apareceu como "fantasma".
A leitura fantasma ocorre porque o intervalo de linhas que satisfazem a condição da consulta mudou entre as duas leituras.
Para evitar a leitura fantasma, usa-se o nível de isolamento SERIALIZABLE, que bloqueia os intervalos de dados, prevenindo o aparecimento de novas linhas entre as leituras. Nos níveis READ COMMITTED ou REPEATABLE READ, fantasmas podem ocorrer.