Bases de datos. Transacciones, concurrencia y recuperación. Lecturas

Lectura comprometida -> NO constituye un problema de interferencia. De hecho, Read Committed (lectura comprometida) es un nivel de aislamiento de las transacciones, no un fenómeno anómalo.

Lectura comprometida (Read Committed) -> Su objetivo es evitar las lecturas sucias. Es uno de los niveles de aislamiento definidos por el estándar SQL:

  • Serializable
  • Read Uncommitted
  • Read Committed
  • Repeatable Read

Lectura no repetible (Non-repeatable Read) -> Ocurre cuando:

  1. Obtiene un valor distinto.
  2. Una transacción lee un dato.
  3. Otra transacción lo modifica y confirma.
  4. La primera vuelve a leer el dato.

Lectura sucia (Dirty Read) -> Una transacción lee datos aún no confirmados por otra. Si esta última hace rollback, la primera ha leído datos que nunca existieron realmente.

Lectura fantasma (Phantom Read) -> Sucede cuando:

  1. Al repetir la consulta aparecen o desaparecen filas «fantasma».
  2. Se ejecuta una consulta que devuelve un conjunto de filas.
  3. Otra transacción inserta o elimina filas.

Niveles de aislamiento

  1. Read Uncommitted.
  2. Read Committed
  3. Repeatable Read.
  4. Serializable.

Truco para recordar

Las palabras ayudan mucho:

  • Dirty Read → problema.
  • Non-repeatable Read → problema.
  • Phantom Read → problema.

Pero:

  • Read Committednivel de aislamiento.

No describe una anomalía.


Relación entre niveles y problemas

Nivel de aislamientoDirtyNo repetibleFantasma
Read Uncommitted❌ Puede❌ Puede❌ Puede
Read Committed✅ Evita❌ Puede❌ Puede
Repeatable Read✅ Evita✅ Evita❌ Puede
Serializable✅ Evita✅ Evita✅ Evita