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:
- Obtiene un valor distinto.
- Una transacción lee un dato.
- Otra transacción lo modifica y confirma.
- 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:
- Al repetir la consulta aparecen o desaparecen filas «fantasma».
- Se ejecuta una consulta que devuelve un conjunto de filas.
- Otra transacción inserta o elimina filas.
Niveles de aislamiento
- Read Uncommitted.
- Read Committed ⭐
- Repeatable Read.
- Serializable.
Truco para recordar
Las palabras ayudan mucho:
- Dirty Read → problema.
- Non-repeatable Read → problema.
- Phantom Read → problema.
Pero:
- Read Committed → nivel de aislamiento.
No describe una anomalía.
Relación entre niveles y problemas
| Nivel de aislamiento | Dirty | No repetible | Fantasma |
|---|---|---|---|
| Read Uncommitted | ❌ Puede | ❌ Puede | ❌ Puede |
| Read Committed | ✅ Evita | ❌ Puede | ❌ Puede |
| Repeatable Read | ✅ Evita | ✅ Evita | ❌ Puede |
| Serializable | ✅ Evita | ✅ Evita | ✅ Evita |