Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
Compare los niveles de aislamiento del estándar SQL, la implementación de PostgreSQL y elija el nivel adecuado para su carga de trabajo.
Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Cuatro niveles estándar
El estándar SQL define cuatro niveles de aislamiento:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
PostgreSQL implementa tres (READ UNCOMMITTED se comporta como READ COMMITTED).
READ COMMITTED (predeterminado en PostgreSQL)
Cada instrucción ve los datos confirmados antes de que comenzara la instrucción. Dentro de una misma transacción puede ver instantáneas diferentes.
-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1; -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1; -- 200 (non-repeatable read)REPEATABLE READ (aislamiento mediante instantánea)
Ve una instantánea tomada al inicio de la transacción. Al volver a leer la misma fila, siempre se devuelve el mismo valor. El REPEATABLE READ de PostgreSQL también impide las lecturas fantasma.
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1; -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1; -- still 100
COMMIT;SERIALIZABLE
El más estricto: es como si las transacciones se ejecutaran una después de otra. PostgreSQL utiliza Serializable Snapshot Isolation (SSI): detecta dependencias simultáneas y aborta las transacciones en conflicto:
BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependenciesConfiguración del nivel de aislamiento
Por transacción, por sesión o de forma global:
-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';
-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'Anomalías permitidas en cada nivel
| Nivel | Sucia | No repetible | Fantasma |
|---|---|---|---|
| READ UNCOMMITTED | quizá | quizá | quizá |
| READ COMMITTED | no | quizá | quizá |
| REPEATABLE READ | no | no | no (en PG) |
| SERIALIZABLE | no | no | no |
Compromisos de rendimiento
- READ COMMITTED — sobrecarga mínima, predeterminado
- REPEATABLE READ — mismo plan, coherencia de la instantánea, sin impacto en el rendimiento salvo que haya conflictos de escritura
- SERIALIZABLE — contabilidad adicional, puede abortar transacciones; la aplicación necesita lógica de reintento
Patrón de reintento para Serializable
SERIALIZABLE puede abortar con el código 40001. Repita la operación en un bucle:
for (let i = 0; i < 3; i++) {
try {
await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
// ... work ...
await client.query('COMMIT');
break;
} catch (e) {
if (e.code === '40001') continue;
throw e;
}
}Lectura de una instantánea coherente
Para consultas analíticas de larga duración que necesitan datos coherentes, REPEATABLE READ ofrece el equilibrio adecuado.
Comportamiento ante conflictos de escritura
Si dos transacciones modifican la misma fila:
- READ COMMITTED — la segunda espera, vuelve a leer la fila actualizada y lo intenta de nuevo
- REPEATABLE READ — la segunda se aborta con el mensaje "could not serialize"; la aplicación debe reintentarlo
Elegir el nivel adecuado
Reglas prácticas:
- OLTP — READ COMMITTED (predeterminado)
- Informes que necesitan coherencia — REPEATABLE READ
- Dinero / inventario — SERIALIZABLE + reintento, O bloqueos explícitos (FOR UPDATE)
A veces los bloqueos explícitos son mejores que el aislamiento
A menudo, SELECT ... FOR UPDATE con READ COMMITTED es más sencillo que SERIALIZABLE para una sola fila muy solicitada.
Resumen
Los niveles de aislamiento intercambian seguridad por simultaneidad.
- READ COMMITTED es el predeterminado
- REPEATABLE READ para lecturas coherentes
- SERIALIZABLE para comportarse «como si fuera secuencial»; necesita lógica de reintento
Comprobación rápida
¿Cuál es el nivel de aislamiento predeterminado de PostgreSQL?
Preguntas frecuentes
¿La lección «Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE» es gratis?
Sí — el texto completo de «Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE»?
Compare los niveles de aislamiento del estándar SQL, la implementación de PostgreSQL y elija el nivel adecuado para su carga de trabajo. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Propiedades ACID y anomalías
- Niveles de aislamiento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
- Interbloqueos: detección y prevención
- Bloqueo optimista frente a pesimista