Desarrollador Backend: pregunta de entrevista
¿En qué se diferencian los niveles de aislamiento de transacciones?
El aislamiento determina qué efectos concurrentes puede observar una transacción. Niveles más fuertes evitan más anomalías pero pueden reducir concurrencia; elige el mínimo que preserve el invariante de negocio.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Los niveles de aislamiento nombran qué anomalías puede ver una transacción. Read uncommitted permite lecturas sucias; read committed las evita pero deja que la misma consulta devuelva filas distintas más tarde; repeatable read congela las filas ya leídas aunque en algunos motores permita fantasmas; serializable garantiza que el resultado equivale a algún orden serial y puede abortar una transacción para cumplirlo. Los motores lo implementan con locks o instantáneas multiversión, así que el mismo nivel se comporta distinto en PostgreSQL, MySQL y SQL Server.
Ejemplo
Una reserva de stock puede necesitar un update protegido o transacción serializable para impedir que dos compras consuman el último artículo. Bajo read committed, dos transacciones pueden leer stock = 1 y ambas decrementar; un SELECT FOR UPDATE o un UPDATE ... WHERE stock > 0 que comprueba el número de filas afectadas cierra la brecha.
Errores frecuentes
- Suponer que repeatable read evita todas las anomalías, incluido el write skew.
- Subir el nivel globalmente en lugar de proteger el único invariante que lo necesita.
- Olvidar que las transacciones serializable pueden fallar y la aplicación debe reintentarlas.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.