🔹 Introducción
Hasta ahora aprendimos a consultar y modificar datos en nuestras tablas.
Pero, ¿qué pasa si tenemos que ejecutar varias operaciones juntas y una falla? 🤔
👉 Ejemplo:
- Descontar dinero de la cuenta de un cliente.
- Aumentar el saldo en la cuenta de otro cliente.
Si la primera operación funciona y la segunda falla, el dinero “desaparece”.
Para evitar esto existen las transacciones en SQL.
🔹 ¿Qué es una transacción?
Una transacción es un bloque de operaciones que se ejecutan como una sola unidad lógica.
- Si todas las operaciones funcionan → se confirma (COMMIT).
- Si algo falla → se revierte (ROLLBACK).
Esto asegura que la base de datos siempre quede en un estado consistente.
🔹 Comandos principales
- START TRANSACTION → inicia una transacción.
- COMMIT → confirma los cambios.
- ROLLBACK → revierte los cambios.
🔹 Nuestra tabla de ejemplo
Imaginemos un banco con cuentas:
CREATE TABLE cuentas (
id INT PRIMARY KEY,
titular VARCHAR(50),
saldo DECIMAL(10,2)
);
INSERT INTO cuentas (id, titular, saldo) VALUES
(1, 'Ana', 1000.00),
(2, 'Juan', 500.00);
👉 Estado inicial:
| id | titular | saldo |
|---|---|---|
| 1 | Ana | 1000.00 |
| 2 | Juan | 500.00 |
🔹 Ejemplo 1: transferencia con transacción
Queremos transferir 200 de Ana a Juan.
START TRANSACTION;
UPDATE cuentas
SET saldo = saldo - 200
WHERE titular = 'Ana';
UPDATE cuentas
SET saldo = saldo + 200
WHERE titular = 'Juan';
COMMIT;
👉 Resultado:
| id | titular | saldo |
|---|---|---|
| 1 | Ana | 800.00 |
| 2 | Juan | 700.00 |
✅ Todo funcionó, se confirman los cambios.
⚠️ Nota importante para DB-Fiddle
Si estás usando DB-Fiddle con MySQL 8, las transacciones pueden dar error porque este entorno no soporta START TRANSACTION directamente en el panel de consultas.
👉 Solución: cambia el motor a PostgreSQL 15 (en la esquina superior izquierda de DB-Fiddle).
Con PostgreSQL los ejemplos funcionan sin problemas.
🔹 Ejemplo 2: usando ROLLBACK
Supongamos que olvidamos escribir correctamente el nombre del segundo titular:
START TRANSACTION;
UPDATE cuentas
SET saldo = saldo - 200
WHERE titular = 'Ana';
UPDATE cuentas
SET saldo = saldo + 200
WHERE titular = 'Pedro'; -- ❌ No existe
ROLLBACK;
👉 Resultado final:
| id | titular | saldo |
|---|---|---|
| 1 | Ana | 1000.00 |
| 2 | Juan | 500.00 |
✅ La base de datos vuelve al estado inicial. ¡El dinero no se perdió!
🔹 Ejemplo 3: confirmación parcial vs. total
Si usamos COMMIT después de la primera actualización y la segunda falla, el error quedaría guardado.
Por eso siempre es mejor usar transacciones completas para operaciones relacionadas.
🔹 Ejemplo 4: transacción con varias operaciones
Podemos incluir INSERT, UPDATE y DELETE en la misma transacción:
START TRANSACTION;
INSERT INTO cuentas (id, titular, saldo) VALUES (3, 'Laura', 300.00);
UPDATE cuentas
SET saldo = saldo + 50
WHERE titular = 'Juan';
DELETE FROM cuentas
WHERE titular = 'Ana';
ROLLBACK;
👉 Después del ROLLBACK, nada de lo anterior se guarda.
🔹 Ejercicio práctico
- Crea una transacción que reste 100 a Juan y sume 100 a Ana.
- Haz que la transacción falle (ejemplo: intenta sumar a un titular que no existe).
- Verifica que la base de datos vuelve al estado inicial.
- Crea una transacción que agregue un nuevo titular y confirme los cambios con
COMMIT. - Elimina ese nuevo titular usando otra transacción, pero con
ROLLBACK.
🔹 Soluciones
-- 1 y 2. Transferencia con error
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE titular = 'Juan';
UPDATE cuentas SET saldo = saldo + 100 WHERE titular = 'Pedro'; -- ❌ error
ROLLBACK;
-- 3. Estado vuelve a la normalidad
-- 4. Insertar nuevo titular
START TRANSACTION;
INSERT INTO cuentas (id, titular, saldo) VALUES (3, 'Laura', 300.00);
COMMIT;
-- 5. Intentar borrar pero revertir
START TRANSACTION;
DELETE FROM cuentas WHERE titular = 'Laura';
ROLLBACK;
🔹 Mini Quiz
Resultados
#1. ¿Qué comando inicia una transacción?
#2. ¿Qué comando se usa para deshacer los cambios de una transacción?
#3. Si todas las operaciones fueron correctas, ¿qué comando usamos para guardar los cambios?
🔹 Resumen de la lección
- Una transacción es un bloque de operaciones que se ejecutan juntas.
- COMMIT guarda los cambios.
- ROLLBACK deshace los cambios si hubo error.
- Son fundamentales en operaciones financieras, reservas y sistemas críticos.
👉 En la próxima lección aprenderás sobre CASE y funciones de ventana, que permiten hacer consultas más avanzadas y potentes.
🔥 No te pierdas los ejercicios y explicaciones adicionales en el Curso SQL paso a paso.