ROLLBACK en SQL: qué es, cómo funciona y ejemplos prácticos

El comando ROLLBACK en SQL se utiliza para revertir una transacción, es decir, deshacer todos los cambios realizados en la base de datos desde el último BEGIN o START TRANSACTION (ver más en transacciones en SQL).

👉 Es una herramienta clave para mantener la integridad de los datos, especialmente cuando ocurre un error o una operación debe cancelarse.

Sintaxis básica de ROLLBACK

ROLLBACK;

Opcionalmente, algunos motores permiten indicar un punto de guardado (SAVEPOINT):

ROLLBACK TO savepoint_name;

¿Qué es una transacción?

Una transacción es un conjunto de operaciones SQL que se ejecutan como una unidad atómica:

  • Todas se confirman juntas con COMMIT.
  • O se cancelan juntas con ROLLBACK.

Ejemplo típico: transferir dinero entre dos cuentas.

Ejemplo básico de ROLLBACK

Supongamos la tabla cuentas:

idtitularsaldo
1Ana1000
2Luis500

Transacción:

BEGIN;
UPDATE cuentas SET saldo = saldo - 200 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 200 WHERE id = 2;

-- Ocurre un error y no queremos confirmar
ROLLBACK;

👉 Los saldos vuelven a su estado inicial (Ana = 1000, Luis = 500).

Ejemplo con COMMIT vs ROLLBACK

BEGIN;
UPDATE empleados SET salario = salario * 1.1 WHERE departamento = 'Ventas';

-- Revisamos los cambios
SELECT * FROM empleados WHERE departamento = 'Ventas';

-- Si todo está bien
COMMIT;

-- Si hubo un error
ROLLBACK;

👉 Con COMMIT los cambios se guardan.
👉 Con ROLLBACK se cancelan.

Uso de SAVEPOINT y ROLLBACK parcial

Podemos definir puntos intermedios dentro de una transacción:

BEGIN;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
SAVEPOINT sp1;

UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
-- Error en esta parte
ROLLBACK TO sp1;

COMMIT;

👉 Solo se deshacen los cambios después de SAVEPOINT sp1.

Ejemplo práctico: compra en un e-commerce

Supongamos que una compra implica varios pasos:

  1. Descontar stock.
  2. Registrar pedido.
  3. Registrar pago.
BEGIN;

UPDATE productos SET stock = stock - 1 WHERE id = 10;
INSERT INTO pedidos (cliente_id, producto_id, total) VALUES (5, 10, 199.99);
INSERT INTO pagos (pedido_id, metodo, estado) VALUES (1001, 'Tarjeta', 'Pendiente');

-- Si ocurre un error en el pago
ROLLBACK;

👉 Aquí se combinan UPDATE, INSERT INTO y eventualmente DELETE, todos revertidos por ROLLBACK.

Ventajas de usar ROLLBACK

  • Mantiene la integridad de los datos.
  • Permite manejar errores controlados en aplicaciones.
  • Evita datos parciales en procesos críticos (pagos, transferencias, inscripciones).
  • Da flexibilidad al desarrollador para probar antes de confirmar cambios.

Errores comunes con ROLLBACK

  1. No iniciar una transacción antes de usar ROLLBACK (ver CREATE TABLE y operaciones DDL que no siempre se revierten).
    👉 Si la base de datos está en modo autocommit (como MySQL por defecto), los cambios ya se confirmaron y ROLLBACK no tiene efecto.
  2. Olvidar el COMMIT final
    👉 Los cambios se perderán si no se confirma al terminar.
  3. Confundir SAVEPOINT con transacciones completas
    👉 Un SAVEPOINT solo permite deshacer parte de la transacción, no reemplaza a BEGIN / COMMIT.
  4. Asumir que ROLLBACK está disponible en todas las operaciones
    👉 Algunas sentencias DDL (ej. CREATE TABLE, DROP INDEX) se confirman automáticamente y no siempre pueden deshacerse.

Buenas prácticas con ROLLBACK

  • Siempre usar BEGIN o START TRANSACTION antes de cambios críticos.
  • Probar primero con transacciones de prueba antes de confirmar cambios masivos.
  • Usar SAVEPOINT en transacciones largas para mayor control.
  • Documentar cuándo y por qué se usa ROLLBACK.
  • Configurar correctamente el modo autocommit en tu motor de base de datos.

ROLLBACK en distintos motores de base de datos

  • MySQL: soporta ROLLBACK solo en motores de almacenamiento transaccionales (ej. InnoDB).
  • PostgreSQL: soporte completo de transacciones y SAVEPOINT.
  • SQL Server: soporta ROLLBACK y ROLLBACK TO.
  • Oracle: soporte avanzado de transacciones, SAVEPOINT y ROLLBACK parcial.
  • SQLite: soporta ROLLBACK en transacciones.

👉 En todos los motores modernos se recomienda su uso en procesos críticos.

Casos de uso de ROLLBACK

  1. Transferencias bancarias → revertir si falla un paso.
  2. Compras online → cancelar pedido si el pago no se aprueba.
  3. Carga masiva de datos → abortar si se detectan errores en el lote.
  4. Sistemas de inventario → deshacer descuentos de stock si no se completa la transacción.

Preguntas frecuentes (FAQ)

1. ¿ROLLBACK deshace todo o solo la última operación?
Deshace todo lo que se hizo desde el último BEGIN, salvo que se use SAVEPOINT.

2. ¿Qué diferencia hay entre ROLLBACK y DELETE?
DELETE elimina filas; ROLLBACK revierte cambios (incluyendo DELETE, UPDATE e INSERT).

3. ¿Qué pasa si ejecuto ROLLBACK sin haber hecho cambios?
No ocurre nada; la base de datos simplemente ignora el comando.

4. ¿ROLLBACK se puede usar en sentencias CREATE o DROP?
Depende del motor. En muchos casos, esas operaciones se confirman automáticamente.

5. ¿Puedo usar ROLLBACK en triggers o procedimientos almacenados?
Sí, aunque en algunos motores tiene restricciones y puede requerir configuraciones especiales.

Conclusión

El comando ROLLBACK en SQL es fundamental para trabajar con transacciones:

  • Permite deshacer cambios en caso de error.
  • Es la contraparte de COMMIT.
  • Puede aplicarse a toda la transacción o a un punto específico con SAVEPOINT.
  • Es clave en sistemas críticos donde la integridad de los datos no puede comprometerse.

Dominar su uso es esencial para desarrolladores, administradores de bases de datos y analistas de datos.

Profundiza en confirmación y reversión dentro de Transacciones y repasa el Glosario SQL completo.

Scroll al inicio