Sobes.tech
Junior — Middle

¿Podría explicar qué se entiende por lectura fantasma en el contexto de transacciones y bases de datos?

sobes.tech AI

Respuesta de la IA

La lectura fantasma es una situación en las transacciones en la que, al volver a ejecutar la misma consulta dentro de una misma transacción, aparecen nuevas filas que no estaban visibles en la primera lectura.

Ejemplo:

  1. La transacción T1 realiza la consulta SELECT * FROM orders WHERE status = 'new' y obtiene 5 registros.
  2. Mientras T1 no ha finalizado, otra transacción T2 añade un nuevo registro con status = 'new' y confirma los cambios.
  3. Si T1 repite la misma consulta, verá ya 6 registros: la nueva fila que apareció como "fantasma".

La lectura fantasma ocurre porque el rango de filas que cumplen la condición de la consulta cambió entre las dos lecturas.

Para evitar la lectura fantasma, se utiliza el nivel de aislamiento SERIALIZABLE, que bloquea los rangos de datos, previniendo la aparición de nuevas filas entre las lecturas. En los niveles READ COMMITTED o REPEATABLE READ, los fantasmas pueden ocurrir.