Saltar al contenido principal
eLearner.app
Módulo 11 · Lección 4 de 444/57 en el curso~12 min
Lecciones del módulo (4/4)

Niveles de aislamiento

Más allá de la ACTUALIZACIÓN explícita, las transacciones también tienen reglas matemáticas innatas profundamente integradas en el motor que gobiernan cuánta energía gastar aislando cada interacción individual de forma predeterminada. Esto se llama Nivel de aislamiento. En el mundo SQL conocemos 4 estándar, en orden de potencia y seguridad pero obviamente lo contrario en términos de rendimiento.

  • READ UNCOMMITTED: Locura anárquica, su transacción verá todos los cambios realizados por otros, incluidos los datos temporales de personas que se encuentran a la mitad de sus propios scripts. Nadie lo usa en bases de datos grandes debido a los constantes errores de lectura sucia.
  • READ COMMITTED: (predeterminado para Postgres). Verá instantáneamente nuevos datos tan pronto como un tercero emita un COMMIT, pero puede ser víctima de lecturas fantasma (ver nuevos registros a mitad de sus largos flujos de trabajo) o de una vista consistente no lineal.
  • REPEATABLE READ: Más pesado. Durante la duración de su gran sesión de ventana de tiempo, "veo" la base de datos congelada en el momento en que comenzó mi consulta, ignorando e ignorando por completo incluso las confirmaciones oficiales completadas por otras personas. Protege contra la aparición mágica de registros, garantizando la estabilidad.
  • SERIALIZABLE: Nivel Dios (súper lento). Trata cada transacción superpuesta bloqueándolas y ejecutándolas en serie en un solo carril, abortando implacablemente aquellas que chocan, eliminando de raíz incluso la posibilidad científica de la más mínima colisión, sacrificando un sólido 90% del alto rendimiento.

¿Cómo lo configuras?

En lugar del BEGIN; normal, escriba:

SQL
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- and you proceed normally with your hermetically sealed isolation
UPDATE products SET stock = 10;
COMMIT;

O en algunas variantes y motores más antiguos lo asignas después de arrancar:

SQL
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Pruébalo tú mismo

Ejercicio#sql.m11.l4.e1
Intentos: 0Cargando...

Inicie una transacción estableciendo formalmente el nivel global durante la duración de la consulta en REPEATABLE READ para crear un intercambio congelado y protegido. Recuerde que en el nivel de consulta no sirve para nada a menos que vaya seguido de algo más, así que ciérrelo vacío con 'COMMIT'.

Cargando editor...
Mostrar pista

Abrir con COMENZAR LECTURA REPETIBLE DEL NIVEL DE AISLAMIENTO; y cerrar con COMMIT;

Solución disponible después de 3 intentos

Ejercicio#sql.m11.l4.e2
Intentos: 0Cargando...

Probemos el loco nivel serializable e insertemos algunos datos ficticios. Abra un bloque 'SERIALIZABLE'. Actualice el nombre de la categoría Id=2 a 'Nuovo Nome Segreto'. Ejecute el compromiso atómico final, estableciendo.

Cargando editor...
Mostrar pista

COMENZAR NIVEL DE AISLAMIENTO SERIALIZABLE; ACTUALIZAR categorías SET nombre = 'Nuovo Nome Segreto' WHERE id = 2; COMMIT;

Solución disponible después de 3 intentos