Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Aislamiento. Niveles de Lectura Repetible y Serializable | Acid
Quizzes & Challenges
Quizzes
Challenges
/
Optimización de SQL y Características de Consulta

bookAislamiento. Niveles de Lectura Repetible y Serializable

Lectura Repetible

El nivel de aislamiento Lectura Repetible en bases de datos garantiza que, al iniciar una transacción, se visualiza una instantánea de la base de datos que permanece igual durante toda la operación.
Esto significa que, aunque se produzcan otros cambios en la base de datos mientras se trabaja, solo se visualizarán los datos tal como estaban al comenzar.
Las transacciones bajo el aislamiento de Lectura Repetible mantienen bloqueos de lectura en todas las filas que consultan y bloqueos de escritura en las filas que insertan, actualizan o eliminan. Esto previene actualizaciones perdidas, lecturas sucias y lecturas no repetibles.
Sin embargo, existe un problema que aún puede ocurrir con este tipo de aislamiento: la lectura fantasma.

Lectura fantasma

La lectura fantasma puede ocurrir cuando una transacción está leyendo datos y otra transacción agrega nuevos registros a la base de datos. Como resultado, es posible obtener conjuntos de resultados diferentes en dos lecturas consecutivas.

Lectura no repetible vs lectura fantasma

La lectura no repetible ocurre cuando la misma consulta ejecutada por el Usuario A devuelve valores diferentes para la misma fila entre lecturas consecutivas, normalmente debido a modificaciones realizadas por el Usuario B.

La lectura fantasma, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve diferentes conjuntos de filas entre lecturas consecutivas, aunque las filas individuales no hayan sido actualizadas.

Podemos especificar este nivel de aislamiento en nuestra consulta SQL utilizando el siguiente comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

El nivel de aislamiento Serializable es el nivel más alto de aislamiento en bases de datos, garantizando la forma más estricta de control de concurrencia.
En este nivel, las transacciones se ejecutan como si fueran procesadas de manera serial, una tras otra, aunque en realidad puedan ejecutarse concurrentemente. Esto asegura que el resultado de las transacciones sea el mismo que si se ejecutaran en algún orden serial, manteniendo la consistencia y evitando todas las anomalías de concurrencia conocidas.

Nota

El uso de este tipo de aislamiento puede llevar a una disminución del rendimiento debido al aumento de bloqueos.

Podemos utilizar la siguiente instrucción para establecer este nivel de aislamiento en nuestra consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Relaciona los niveles de aislamiento con sus descripciones.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 7

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 is the difference between phantom read and non-repeatable read?

Can you give more examples of phantom reads?

How does the Serializable isolation level prevent phantom reads?

bookAislamiento. Niveles de Lectura Repetible y Serializable

Desliza para mostrar el menú

Lectura Repetible

El nivel de aislamiento Lectura Repetible en bases de datos garantiza que, al iniciar una transacción, se visualiza una instantánea de la base de datos que permanece igual durante toda la operación.
Esto significa que, aunque se produzcan otros cambios en la base de datos mientras se trabaja, solo se visualizarán los datos tal como estaban al comenzar.
Las transacciones bajo el aislamiento de Lectura Repetible mantienen bloqueos de lectura en todas las filas que consultan y bloqueos de escritura en las filas que insertan, actualizan o eliminan. Esto previene actualizaciones perdidas, lecturas sucias y lecturas no repetibles.
Sin embargo, existe un problema que aún puede ocurrir con este tipo de aislamiento: la lectura fantasma.

Lectura fantasma

La lectura fantasma puede ocurrir cuando una transacción está leyendo datos y otra transacción agrega nuevos registros a la base de datos. Como resultado, es posible obtener conjuntos de resultados diferentes en dos lecturas consecutivas.

Lectura no repetible vs lectura fantasma

La lectura no repetible ocurre cuando la misma consulta ejecutada por el Usuario A devuelve valores diferentes para la misma fila entre lecturas consecutivas, normalmente debido a modificaciones realizadas por el Usuario B.

La lectura fantasma, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve diferentes conjuntos de filas entre lecturas consecutivas, aunque las filas individuales no hayan sido actualizadas.

Podemos especificar este nivel de aislamiento en nuestra consulta SQL utilizando el siguiente comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

El nivel de aislamiento Serializable es el nivel más alto de aislamiento en bases de datos, garantizando la forma más estricta de control de concurrencia.
En este nivel, las transacciones se ejecutan como si fueran procesadas de manera serial, una tras otra, aunque en realidad puedan ejecutarse concurrentemente. Esto asegura que el resultado de las transacciones sea el mismo que si se ejecutaran en algún orden serial, manteniendo la consistencia y evitando todas las anomalías de concurrencia conocidas.

Nota

El uso de este tipo de aislamiento puede llevar a una disminución del rendimiento debido al aumento de bloqueos.

Podemos utilizar la siguiente instrucción para establecer este nivel de aislamiento en nuestra consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Relaciona los niveles de aislamiento con sus descripciones.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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