Sobes.tech
Junior — Middle

Pode explicar o que se entende por fenómeno da leitura fantasma no contexto das transações?

sobes.tech IA

Resposta da IA

O fenómeno de leitura fantasma ocorre no contexto de transações de bases de dados, quando numa mesma transação uma consulta repetida aos dados devolve resultados diferentes devido a outra transação ter adicionado ou eliminado linhas que correspondem à condição de seleção.

Por exemplo, se na primeira parte de uma transação selecionámos todos os registos com uma determinada condição, e depois na segunda parte repetimos a mesma consulta, podem aparecer novas linhas (fantasmas) que não estavam visíveis na primeira leitura devido a alterações paralelas na base.

Isto está relacionado com o nível de isolamento das transações: a leitura fantasma é possível ao nível READ COMMITTED, mas é evitada ao nível SERIALIZABLE.

Exemplo:

-- Transação 1
BEGIN;
SELECT * FROM orders WHERE status = 'pending'; -- devolveu 5 registos
-- A transação 2 adiciona em paralelo um novo registo com status = 'pending'
SELECT * FROM orders WHERE status = 'pending'; -- agora devolverá 6 registos
COMMIT;