Transacciones en SQL: START TRANSACTION, COMMIT y ROLLBACK con ejemplos


Una transacción permite agrupar varias operaciones para que se comporten como una sola unidad. Es fundamental cuando un proceso no puede quedar “a mitad de camino”.

El problema de las operaciones parciales

En una transferencia bancaria hay dos pasos:

  1. restar dinero de una cuenta;
  2. sumarlo en otra.

Si el primer paso ocurre y el segundo falla, los datos quedan inconsistentes.

La idea de “todo o nada”

Una transacción agrupa instrucciones que pertenecen al mismo proceso de negocio. Si una falla, podemos evitar que las demás queden confirmadas.

El objetivo no es solo “poder deshacer”, sino mantener la base en un estado coherente.

START TRANSACTION

Marca el inicio de una transacción.

START TRANSACTION;

COMMIT

Confirma los cambios de forma definitiva.

Después de COMMIT, un ROLLBACK de esa misma transacción ya no puede revertirlos.

COMMIT;

ROLLBACK

Revierte los cambios realizados desde el inicio de la transacción.

ROLLBACK es útil cuando detectamos un error de validación, falta de stock, saldo insuficiente o cualquier condición que impida completar el proceso.

ROLLBACK;

Ejemplo completo

START TRANSACTION;

UPDATE cuentas
SET saldo = saldo - 1000
WHERE id = 1;

UPDATE cuentas
SET saldo = saldo + 1000
WHERE id = 2;

COMMIT;

¿Qué pasaría si la segunda operación falla?

En el ejemplo de transferencia, si restamos 1000 de la cuenta 1 y luego falla la suma en la cuenta 2, debemos ejecutar ROLLBACK. Así el descuento inicial también se deshace.

Ese comportamiento es la base de la atomicidad.

Propiedades ACID

Atomicidad

Todo se ejecuta o nada se ejecuta.

Consistencia

La base debe pasar de un estado válido a otro estado válido.

Aislamiento

Transacciones concurrentes no deberían interferir incorrectamente.

Por ejemplo, dos ventas simultáneas no deberían descontar el mismo último producto sin coordinación.

Durabilidad

Una vez hecho COMMIT, los cambios deben persistir.

SAVEPOINT

Permite crear puntos intermedios dentro de una transacción.

START TRANSACTION;
UPDATE productos SET stock = stock - 1 WHERE id = 10;
SAVEPOINT despues_stock;
UPDATE ventas SET estado = 'procesada' WHERE id = 50;

Podemos volver solo hasta ese punto:

ROLLBACK TO despues_stock;

RELEASE SAVEPOINT

Cuando ya no necesitamos un punto intermedio podemos liberarlo.

RELEASE SAVEPOINT despues_stock;

Autocommit

MySQL suele confirmar automáticamente cada sentencia individual cuando no hay una transacción explícita.

Eso significa que un UPDATE ejecutado fuera de una transacción puede quedar confirmado inmediatamente.

SELECT @@autocommit;

Ejemplo: venta y stock

START TRANSACTION;
INSERT INTO ventas (cliente_id, total)
VALUES (15, 25000);
UPDATE productos
SET stock = stock - 1
WHERE id = 3;
COMMIT;

Transacciones y errores de aplicación

En una aplicación real, el código normalmente hace algo así:

  1. inicia la transacción;
  2. ejecuta las operaciones;
  3. si todo sale bien, hace COMMIT;
  4. si ocurre una excepción o validación fallida, hace ROLLBACK.

Cuándo usar transacciones

  • pagos;
  • transferencias;
  • stock;
  • facturas con detalles;
  • procesos que modifican varias tablas.

Errores comunes

  • olvidar COMMIT;
  • no ejecutar ROLLBACK ante error;
  • mantener transacciones abiertas demasiado tiempo;
  • incluir tareas innecesarias dentro de la transacción.

Ejercicios

  1. crear una transferencia;
  2. simular un error y hacer ROLLBACK;
  3. registrar venta y descontar stock;
  4. crear y usar un SAVEPOINT.

¿Qué sigue?

Índices y optimización.

¿Te sirvió esta guía? ☕

Si este contenido te ayudó y querés apoyar a Club Programador para seguir publicando ejercicios, proyectos y guías gratuitas, podés colaborar mediante:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Ruta SQL / MySQL

Ver todos los contenidos de SQL / MySQL

← INSERT, UPDATE y DELETE

Índices en MySQL →


Descubre más desde Club Programador

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Un comentario en “Transacciones en SQL: START TRANSACTION, COMMIT y ROLLBACK con ejemplos”

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo