Comprender qué es una transacción en bases de datos.
Estudiar las propiedades ACID.
Aprender técnicas de control de concurrencia.
¿Qué es una Transacción?
Una unidad de trabajo que agrupa una o más operaciones SQL que se ejecutan como un bloque.
Ejemplo: realizar un pago y registrar el movimiento contable.
Si falla una operación → se deshace todo.
Propiedades ACID
Atomicidad: todo o nada.
Consistencia: la base de datos pasa de un estado válido a otro.
Aislamiento: transacciones no interfieren entre sí.
Durabilidad: los cambios persisten aun si el sistema falla.
Manejo de Transacciones
BEGIN;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT; -- confirma los cambios
-- ROLLBACK; -- deshace los cambios si hay error
Problemas de Concurrencia
Lectura sucia: leer cambios no confirmados.
Lectura no repetible: el valor cambia entre lecturas.
Lectura fantasma: aparecen nuevas filas durante la transacción.
Niveles de Aislamiento SQL
READ UNCOMMITTED: permite lecturas sucias.
READ COMMITTED: evita lecturas sucias (por defecto en muchos SGBD).
REPEATABLE READ: evita lecturas no repetibles.
SERIALIZABLE: máximo aislamiento, evita todas las anomalías.
Bloqueos (Locks)
Shared Lock: permite lectura concurrente.
Exclusive Lock: bloquea escritura y lectura.
Los gestores de bases de datos aplican locks automáticamente.
Técnicas de Control de Concurrencia
Control de bloqueos.
Control multiversión (MVCC).
Detección y prevención de interbloqueos (deadlocks).
MVCC — Multiversion Concurrency Control
Permite que múltiples transacciones lean datos sin bloquearse:
Cada transacción ve una "foto" consistente de los datos.
Ejemplo: PostgreSQL y Oracle usan MVCC.
Ejercicio Guiado
Simula una transferencia bancaria con BEGIN, COMMIT y ROLLBACK.
Configura un nivel de aislamiento y observa el comportamiento.
Prueba dos sesiones simultáneas actualizando la misma fila.