Sobes.tech
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:

  1. A transação T1 executa a consulta SELECT * FROM orders WHERE status = 'new' e obtém 5 registros.
  2. Enquanto T1 não termina, outra transação T2 adiciona um novo registro com status = 'new' e faz commit das alterações.
  3. 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.