En el trabajo con bases de datos, no todo es consultar y leer información.
Cuando llega el momento de insertar, actualizar o eliminar datos, la precisión y el control se vuelven esenciales.
Aquí es donde entran las transacciones SQL, una de las herramientas más poderosas — y a veces menos comprendidas — para garantizar que los cambios en tus datos sean seguros, coherentes y recuperables.
En este artículo aprenderás cómo funcionan, qué significa el modelo ACID, y cómo aplicar BEGIN, COMMIT y ROLLBACK en PostgreSQL (con notas para SQL Server).
Todos los ejemplos pueden ejecutarse directamente en 👉 db-fiddle.com.
1. ¿Qué es una transacción?
Una transacción es un conjunto de operaciones SQL que se ejecutan como una unidad lógica de trabajo.
Esto significa que o se ejecutan todas correctamente, o ninguna de ellas se aplica.
Ejemplo:
Si estás transfiriendo dinero entre cuentas, no puedes permitir que una se debite sin que la otra se acredite.
Ambas operaciones deben ser atómicas.
2. Las propiedades ACID
Las transacciones se rigen por cuatro principios clave:
| Propiedad | Significado |
|---|---|
| Atomicidad | Todos los cambios ocurren o ninguno. |
| Consistencia | La base de datos pasa de un estado válido a otro. |
| Aislamiento | Cada transacción es independiente de las demás. |
| Durabilidad | Una vez confirmada, la transacción se guarda permanentemente. |
3. Estructura básica de una transacción
BEGIN; -- Inicia la transacción
UPDATE empleados
SET salario = salario * 1.10
WHERE id_departamento = 4;
COMMIT; -- Confirma los cambios ➡️ Si todo se ejecuta correctamente, los cambios se confirman con COMMIT.
Pero, ¿qué pasa si algo falla?
BEGIN;
UPDATE empleados
SET salario = salario * 1.10
WHERE id_departamento = 4;
-- Simulamos un error
UPDATE empleados SET salario = 'error';
ROLLBACK; -- Revierte toda la transacción En resumen:
BEGINinicia la transacción.COMMITguarda los cambios.ROLLBACKrevierte los cambios si hay un error.
4. Control de errores con TRY/CATCH (en SQL Server)
PostgreSQL no tiene un bloque TRY...CATCH dentro del SQL estándar, pero en SQL Server sí es posible manejar errores explícitamente:
BEGIN TRY
BEGIN TRANSACTION;
UPDATE empleados
SET salario = salario * 1.10
WHERE id_departamento = 4;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT 'Error detectado. Transacción revertida.';
END CATCH; En PostgreSQL, el control de errores se realiza generalmente desde el lenguaje cliente (por ejemplo, Python, C#, etc.), o mediante bloques anónimos DO $$ BEGIN ... EXCEPTION WHEN ... END $$;
5. Transacciones con múltiples operaciones
Imagina que deseas mover empleados de un departamento a otro y actualizar su salario.
BEGIN;
UPDATE empleados
SET id_departamento = 3
WHERE id_departamento = 2;
UPDATE empleados
SET salario = salario + 5000
WHERE id_departamento = 3;
COMMIT; ✅ Si alguna de las dos operaciones falla, puedes ejecutar ROLLBACK; para revertir todo y mantener la coherencia de datos.
6. Diferencias entre motores SQL
| Motor | Iniciar transacción | Confirmar | Revertir | Manejo de errores |
|---|---|---|---|---|
| PostgreSQL | BEGIN | COMMIT | ROLLBACK | Bloques EXCEPTION o lenguaje cliente |
| SQL Server | BEGIN TRANSACTION | COMMIT TRANSACTION | ROLLBACK TRANSACTION | TRY...CATCH nativo |
| MySQL | START TRANSACTION | COMMIT | ROLLBACK | Depende del motor InnoDB |
| SQLite | BEGIN TRANSACTION | COMMIT | ROLLBACK | Soporte limitado a nivel básico |
7. Buenas prácticas
✅ Siempre agrupa operaciones relacionadas dentro de una transacción.
✅ Usa ROLLBACK si detectas errores o inconsistencias.
✅ No dejes transacciones abiertas: bloquean recursos.
✅ Evita confirmar (COMMIT) a medias; espera a que todo esté validado.
✅ Documenta claramente qué consultas modifican datos.
8. Conclusión
Las transacciones son tu red de seguridad en SQL.
Dominar BEGIN, COMMIT y ROLLBACK te permitirá trabajar con confianza, incluso en bases de datos críticas, evitando pérdidas o corrupciones de datos.
Y si aprendes a integrarlas con manejo de errores, tus consultas pasarán de ser funcionales a profesionalmente robustas.