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;