Lectura sucia: lea los datos SIN COMPROMISO de otra transacción.
Lectura no repetible: lee los datos COMPORTADOS de una consulta de ACTUALIZACIÓN de otra transacción.
Lectura Phantom: lee datos COMPORTADOS de una consulta INSERTAR o ELIMINAR de otra transacción.
Tenga en cuenta que las ACTUALIZACIONES pueden ser un trabajo más frecuente en ciertas aplicaciones en lugar de las INSERTAS o LAS ELIMINACIONES reales; en estos casos, el peligro de lecturas no repetibles permanece solo; las lecturas fantasmas no son posibles en esos casos. Esto explica por qué las ACTUALIZACIONES se tratan de forma diferente a INSERT-DELETE y la anomalía en cuestión también recibe un nombre diferente.
También hay un costo de procesamiento adicional asociado con el manejo de INSERT-DELETES, en lugar de solo manejar las ACTUALIZACIONES.
El nivel de aislamiento TRANSACTION_READ_UNCOMMITTED no evita nada. Es el nivel de aislamiento cero.
El nivel de aislamiento TRANSACTION_READ_COMMITTED impide que solo uno, es decir. Dirty lee.
El nivel de aislamiento TRANSACTION_REPEATABLE_READ previene dos anomalías: lecturas sucias y lecturas no repetibles.
El nivel de aislamiento TRANSACTION_SERIALIZABLE previene las tres anomalías: lecturas sucias, lecturas no repetibles y lecturas Phantom.
¿Por qué no simplemente establecer la transacción SERIALIZABLE en todo momento?
Bueno, la respuesta a la pregunta anterior es: la configuración de SERIALIZABLE hace que las transacciones sean muy lentas, lo que de nuevo no deseamos.
De hecho el consumtion tiempo de la transacción se encuentra en la siguiente tarifa:
SERIALIZABLE> REPEATABLE_READ> READ_COMMITTED> READ_UNCOMMITTED.
La configuración READ_UNCOMMITTED es la más rápida.
En realidad, necesitamos analizar el caso de uso y decidir un nivel de aislamiento para optimizar el tiempo de transacción y también evitar la mayoría de las anomalías.
Tenga en cuenta que las bases de datos tienen de forma predeterminada la configuración REPEATABLE_READ.
http://en.wikipedia.org/wiki/Isolation_(database_systems) –