- Lecturas sucias : leer datos NO COMPROMETIDOS de otra transacción
- Lecturas no repetibles : lea datos COMPROMETIDOS de una
UPDATE
consulta de otra transacción
- Lecturas fantasma : lea datos COMPROMETIDOS de unaconsulta
INSERT
oDELETE
de otra transacción
Nota : Las declaraciones DELETE de otra transacción también tienen una probabilidad muy baja de causar lecturas no repetibles en ciertos casos. Ocurre cuando la declaración DELETE, desafortunadamente, elimina la misma fila que estaba consultando su transacción actual. Pero este es un caso raro, y es mucho más improbable que ocurra en una base de datos que tiene millones de filas en cada tabla. Las tablas que contienen datos de transacciones generalmente tienen un alto volumen de datos en cualquier entorno de producción.
También podemos observar que las ACTUALIZACIONES pueden ser un trabajo más frecuente en la mayoría de los casos de uso en lugar de INSERT o DELETES reales (en tales casos, el peligro de lecturas no repetibles solo permanece; las lecturas fantasmas no son posibles en esos casos). Esta es la razón por la cual las ACTUALIZACIONES se tratan de manera diferente a INSERT-DELETE y la anomalía resultante también se denomina de manera diferente.
También hay un costo de procesamiento adicional asociado con el manejo de INSERT-DELETEs, en lugar de solo manejar las ACTUALIZACIONES.
- READ_UNCOMMITTED no evita nada. Es el nivel de aislamiento cero
- READ_COMMITTED evita solo uno, es decir, lecturas sucias
- REPEATABLE_READ previene dos anomalías: lecturas sucias y lecturas no repetibles
- SERIALIZABLE evita las tres anomalías: lecturas sucias, lecturas no repetibles y lecturas fantasma
Entonces, ¿por qué no simplemente configurar la transacción SERIALIZABLE en todo momento? Bueno, la respuesta a la pregunta anterior es: la configuración SERIALIZABLE hace que las transacciones sean muy lentas , lo que nuevamente no queremos.
De hecho, el consumo de tiempo de transacción está en la siguiente tasa:
SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
Entonces, la configuración READ_UNCOMMITTED es la más rápida .
Resumen
En realidad, necesitamos analizar el caso de uso y decidir un nivel de aislamiento para optimizar el tiempo de transacción y también prevenir la mayoría de las anomalías.
Tenga en cuenta que las bases de datos por defecto tienen la configuración REPEATABLE_READ.