

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Definición de niveles de aislamiento
<a name="transactions-isolation-levels"></a>

La "I" de `ACID` significa *aislamiento*. El grado de aislamiento de una transacción determina el grado en el que otras transacciones simultáneas pueden afectar a los datos en los que opera.

El [estándar SQL:1992](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt) creó un vocabulario para describir los niveles de aislamiento. Define tres tipos de interacciones (que denomina *fenómenos*) que pueden producirse entre dos transacciones simultáneas, `Tx1` y `Tx2`:
+ `Dirty read`: esto ocurre cuando `Tx1` modifica un elemento y, a continuación, `Tx2` lee ese elemento antes de que `Tx1` haya realizado el cambio. A continuación, si `Tx1` nunca consigue confirmar el cambio o lo restaura, `Tx2` leerá un valor que nunca leyó en la base de datos.
+ `Non-repeatable read`: esto ocurre cuando `Tx1` lee un elemento y, a continuación, `Tx2` lo modifica o elimina, confirma el cambio y, a continuación, `Tx1` intenta volver a leer el elemento. `Tx1` ahora lee un valor diferente al anterior o descubre que el elemento ya no existe.
+ `Phantom read`: esto ocurre cuando `Tx1` lee un conjunto de elementos que cumplen un criterio de búsqueda y, a continuación, `Tx2` añade un nuevo elemento que cumple el criterio de búsqueda y luego `Tx1` repite la búsqueda. `Tx1` ahora obtiene un conjunto de elementos diferente al que tenía antes.

Cada uno de estos tres tipos de interacción puede provocar incoherencias en los datos resultantes en una base de datos.

El estándar SQL:1992 definió cuatro niveles de aislamiento que tienen diferentes garantías en cuanto a los tres tipos de interacción y las incoherencias que pueden producir. En los cuatro niveles, se puede garantizar que una transacción se ejecute por completo o que no se ejecute en absoluto:
+ `READ UNCOMMITTED`: permite los tres tipos de interacciones (es decir, lecturas incorrectas, lecturas no repetibles y lecturas fantasma).
+ `READ COMMITTED`: las lecturas incorrectas no son posibles, pero sí las no repetibles y las lecturas fantasma.
+ `REPEATABLE READ`: las lecturas incorrectas y las lecturas no repetibles no son correctas, pero las lecturas fantasmas sí lo son.
+ `SERIALIZABLE`: no se puede producir ninguno de los tres tipos de fenómenos de interacción.

El control de simultaneidad multiversión (MVCC) permite otro tipo de aislamiento, es decir, el aislamiento *SNAPSHOT* . Esto garantiza que una transacción opera en una instantánea de datos en el momento en el que aparece cuando comienza la transacción y que ninguna otra transacción puede cambiar esa instantánea.