Transacciones y propiedades ACID
Una transacción agrupa varias operaciones SQL como una sola unidad indivisible. Las propiedades ACID son las cuatro garantías que una base de datos relacional ofrece para que esos datos sean confiables incluso ante fallos y accesos concurrentes.
💡 Qué es una transacción
Un grupo de operaciones que se ejecuta entre BEGIN y COMMIT: todo o nada.
🔐 Qué es ACID
Atomicity, Consistency, Isolation y Durability: las 4 garantías de una transacción.
📏 Para qué sirve
Que los datos sigan siendo correctos ante caídas, errores y concurrencia.
El bloque BEGIN … COMMIT
Unidad indivisibleUna transacción se confirma con COMMIT o se deshace por completo con ROLLBACK.
Transferir $100 de Ana a Beto
Las dos operaciones deben ocurrir juntas o ninguna.
BEGIN;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; -- Ana
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2; -- Beto
COMMIT;
-- si algo falla en el medio: ROLLBACK;
La transferencia que debe ser atómica
Las 4 garantías, una por una
A · C · I · D| Propiedad | Qué garantiza | En una frase |
|---|---|---|
| Atomicity | Todo o nada | O se hacen todas las operaciones, o ninguna |
| Consistency | Integridad | Nunca queda un estado que viole constraints |
| Isolation | Concurrencia | Cada transacción corre como si estuviera sola |
| Durability | Persistencia | Lo confirmado sobrevive a caídas del sistema |
El ejemplo clásico: la transferencia
Todo o nada¿Qué pasa si el servidor se cae justo entre los dos UPDATE? Acá se ve por qué la atomicidad es crítica.
Con vs sin atomicidad ante una caída
❌ Sin atomicidad
✅ Con atomicidad
COMMIT, la base deshace
el primer UPDATE. Nunca queda “a medias”.
El aislamiento tiene niveles
Lo que más preguntanEl aislamiento no es “todo o nada”: hay 4 niveles que equilibran seguridad vs rendimiento. A más aislamiento, menos problemas de concurrencia, pero más bloqueos y menos velocidad.
| Nivel | Dirty read | Non-repeatable read | Phantom read |
|---|---|---|---|
| Read Uncommitted | Posible | Posible | Posible |
| Read Committed | No | Posible | Posible |
| Repeatable Read | No | No | Posible |
| Serializable | No | No | No |
Sin durabilidad vs con durabilidad
Tras el COMMIT😱 Sin durabilidad
- Ves "compra exitosa"
- Se corta la luz
- Al volver, la compra no está
- Los datos vivían solo en memoria
🛡️ Con durabilidad
- El commit escribe a disco (WAL)
- Se corta la luz
- Al volver, la compra sigue ahí
- Lo confirmado es permanente
🎯 Resumen
- Transacción Grupo de operaciones entre BEGIN y COMMIT: o todas, o ninguna.
- Atomicity Todo o nada: si algo falla, ROLLBACK deshace todo.
- Consistency La base pasa de un estado válido a otro; respeta constraints.
- Isolation Las transacciones concurrentes no se interfieren (tiene 4 niveles).
- Durability Lo confirmado con commit sobrevive a caídas (gracias al WAL).