📘 Lección 17: Transacciones en SQL

🔹 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:

  1. Descontar dinero de la cuenta de un cliente.
  2. 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:

idtitularsaldo
1Ana1000.00
2Juan500.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:

idtitularsaldo
1Ana800.00
2Juan700.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:

idtitularsaldo
1Ana1000.00
2Juan500.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

  1. Crea una transacción que reste 100 a Juan y sume 100 a Ana.
  2. Haz que la transacción falle (ejemplo: intenta sumar a un titular que no existe).
  3. Verifica que la base de datos vuelve al estado inicial.
  4. Crea una transacción que agregue un nuevo titular y confirme los cambios con COMMIT.
  5. 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?

Previa
Finalizar

🔹 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.

Scroll al inicio