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
:
id | titular | saldo |
---|---|---|
1 | Ana | 1000 |
2 | Luis | 500 |
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:
- Descontar stock.
- Registrar pedido.
- 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
- 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 yROLLBACK
no tiene efecto. - Olvidar el COMMIT final
👉 Los cambios se perderán si no se confirma al terminar. - Confundir SAVEPOINT con transacciones completas
👉 Un SAVEPOINT solo permite deshacer parte de la transacción, no reemplaza aBEGIN
/COMMIT
. - 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
oSTART 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
yROLLBACK 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
- Transferencias bancarias → revertir si falla un paso.
- Compras online → cancelar pedido si el pago no se aprueba.
- Carga masiva de datos → abortar si se detectan errores en el lote.
- 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.