Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Aislamiento. Niveles de Lectura Confirmada y No Confirmada | Acid
Técnicas Avanzadas en SQL

bookAislamiento. Niveles de Lectura Confirmada y No Confirmada

En el contexto de las bases de datos, la aislación se refiere a la capacidad de un sistema de bases de datos para controlar la visibilidad de los cambios realizados por transacciones concurrentes. Garantiza que las transacciones operen de manera independiente entre sí, evitando interferencias y manteniendo la integridad de los datos.

Existen 4 niveles de aislación en SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Este es el nivel de aislación más bajo, donde las transacciones pueden ver los cambios realizados por otras transacciones incluso antes de que se confirmen. Este nivel permite lecturas sucias, lo que significa que una transacción puede leer datos que han sido modificados por otra transacción pero que aún no han sido confirmados.

Lecturas sucias

Implementación

Para especificar el nivel de aislación para la transacción, podemos utilizar el siguiente comando en nuestra consulta:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Esta sentencia cambia el nivel de aislación para la transacción actual a "Read Uncommitted", permitiendo que la transacción potencialmente lea datos modificados por otras transacciones no confirmadas;

  • este comando debe usarse solo dentro del bloque de la transacción. De lo contrario, no tendrá efecto y se utilizará el nivel de aislación predeterminado.

También podemos verificar el nivel de aislación actual utilizando el siguiente comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

El nivel de aislación Read Committed garantiza que una transacción solo vea los datos que han sido confirmados por otras transacciones.
Esto significa que los cambios no confirmados realizados por otras transacciones no son visibles para las transacciones que operan bajo Read Committed.
Como resultado, previene las lecturas sucias al permitir que una transacción lea solo datos confirmados. Sin embargo, este nivel de transacción presenta problemas con lecturas no repetibles.

Lecturas no repetibles

El nivel de aislamiento "Read committed" permite lecturas no repetibles porque bloquea la operación de lectura sobre valores que están en proceso de transacciones no confirmadas, pero no bloquea la operación de escritura.
Como resultado, es posible escribir nuevos datos en la fila que está siendo leída por otra transacción.

Actualización perdida

Debido a la ausencia de bloqueo de escritura, existe un problema adicional con el nivel de aislamiento read committed: actualizaciones perdidas.

Las actualizaciones perdidas ocurren cuando dos transacciones paralelas intentan modificar la misma fila. Como resultado, la transacción que se confirma más tarde sobrescribe los valores confirmados por otras transacciones.

Implementación

También podemos especificar este nivel de aislamiento utilizando los siguientes comandos:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Es importante notar que Read Committed es el nivel de aislamiento predeterminado para la mayoría de los Sistemas de Gestión de Bases de Datos, por lo que podemos omitir especificarlo.

question mark

Si una transacción lee datos que han sido modificados por otra transacción no confirmada, ¿qué tipo de lectura es?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

What are the other two isolation levels besides Read Uncommitted and Read Committed?

Can you explain what repeatable read and serializable isolation levels are?

How do non-repeatable reads and lost updates affect data consistency?

Awesome!

Completion rate improved to 4.35

bookAislamiento. Niveles de Lectura Confirmada y No Confirmada

Desliza para mostrar el menú

En el contexto de las bases de datos, la aislación se refiere a la capacidad de un sistema de bases de datos para controlar la visibilidad de los cambios realizados por transacciones concurrentes. Garantiza que las transacciones operen de manera independiente entre sí, evitando interferencias y manteniendo la integridad de los datos.

Existen 4 niveles de aislación en SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Este es el nivel de aislación más bajo, donde las transacciones pueden ver los cambios realizados por otras transacciones incluso antes de que se confirmen. Este nivel permite lecturas sucias, lo que significa que una transacción puede leer datos que han sido modificados por otra transacción pero que aún no han sido confirmados.

Lecturas sucias

Implementación

Para especificar el nivel de aislación para la transacción, podemos utilizar el siguiente comando en nuestra consulta:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Esta sentencia cambia el nivel de aislación para la transacción actual a "Read Uncommitted", permitiendo que la transacción potencialmente lea datos modificados por otras transacciones no confirmadas;

  • este comando debe usarse solo dentro del bloque de la transacción. De lo contrario, no tendrá efecto y se utilizará el nivel de aislación predeterminado.

También podemos verificar el nivel de aislación actual utilizando el siguiente comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

El nivel de aislación Read Committed garantiza que una transacción solo vea los datos que han sido confirmados por otras transacciones.
Esto significa que los cambios no confirmados realizados por otras transacciones no son visibles para las transacciones que operan bajo Read Committed.
Como resultado, previene las lecturas sucias al permitir que una transacción lea solo datos confirmados. Sin embargo, este nivel de transacción presenta problemas con lecturas no repetibles.

Lecturas no repetibles

El nivel de aislamiento "Read committed" permite lecturas no repetibles porque bloquea la operación de lectura sobre valores que están en proceso de transacciones no confirmadas, pero no bloquea la operación de escritura.
Como resultado, es posible escribir nuevos datos en la fila que está siendo leída por otra transacción.

Actualización perdida

Debido a la ausencia de bloqueo de escritura, existe un problema adicional con el nivel de aislamiento read committed: actualizaciones perdidas.

Las actualizaciones perdidas ocurren cuando dos transacciones paralelas intentan modificar la misma fila. Como resultado, la transacción que se confirma más tarde sobrescribe los valores confirmados por otras transacciones.

Implementación

También podemos especificar este nivel de aislamiento utilizando los siguientes comandos:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Es importante notar que Read Committed es el nivel de aislamiento predeterminado para la mayoría de los Sistemas de Gestión de Bases de Datos, por lo que podemos omitir especificarlo.

question mark

Si una transacción lee datos que han sido modificados por otra transacción no confirmada, ¿qué tipo de lectura es?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6
some-alt