Contenido de esta guía
Qué hace ROLLBACK
ROLLBACK termina una transacción sin guardar sus cambios. Es la salida adecuada cuando una comprobación falla, una operación afecta a más filas de las previstas o decides no continuar.
Piensa en la transacción como una zona de trabajo provisional: puedes ejecutar varias sentencias, revisar el resultado y elegir entre COMMIT para conservarlo o ROLLBACK para descartarlo.
El flujo seguro
- Inicia la transacción con
BEGINoSTART TRANSACTION. - Ejecuta el cambio.
- Consulta las filas afectadas y comprueba que el resultado es correcto.
- Termina con
COMMIToROLLBACK.
ROLLBACK no es una copia de seguridad. Solo puede cancelar cambios que todavía pertenecen a una transacción abierta. Después de confirmar con COMMIT, necesitas otros mecanismos de recuperación.
Ejemplo guiado
El teclado tiene un stock inicial de 7 unidades. La siguiente transacción reduce temporalmente el stock en 2, comprueba el valor y después deshace el cambio:
BEGIN;
UPDATE productos
SET stock = stock - 2
WHERE id = 2;
SELECT stock AS stock_durante_transaccion
FROM productos
WHERE id = 2;
ROLLBACK;
SELECT stock AS stock_final
FROM productos
WHERE id = 2;| stock_final |
|---|
| 7 |
Dentro de la transacción el stock llega a 5. Tras ROLLBACK, la consulta final vuelve a mostrar 7 porque la modificación no se confirmó.
Error frecuente
Esperar que ROLLBACK deshaga un COMMIT
COMMIT cierra la transacción y confirma sus cambios. Después de COMMIT, un ROLLBACK no puede revertir esos cambios ya confirmados; si no existe una transacción activa, el comportamiento o el mensaje concreto depende del motor y de la herramienta. Antes de confirmar, revisa el número de filas y algunos valores representativos.
Comprueba lo aprendido
Prueba un cambio sin conservarlo
Escribe una transacción que ponga a 0 el stock del producto con id = 5, consulte el valor temporal, ejecute ROLLBACK y devuelva el stock final con el alias stock_final.
BEGIN.WHERE id = 5.ROLLBACK, ejecuta otro SELECT.Solución razonada
BEGIN;
UPDATE productos
SET stock = 0
WHERE id = 5;
SELECT stock FROM productos WHERE id = 5;
ROLLBACK;
SELECT stock AS stock_final
FROM productos
WHERE id = 5;| stock_final |
|---|
| 11 |
El valor 0 solo existe dentro de la transacción. ROLLBACK recupera las 11 unidades originales.
Compatibilidad y límites
ROLLBACK forma parte del control transaccional habitual, pero el inicio de la transacción y el modo de autocommit varían entre herramientas y motores. Algunas operaciones de definición de datos también tienen reglas especiales. Practica primero en una base de prueba.
Para deshacer solo una parte del trabajo sin abandonar toda la transacción, busca los savepoints y ROLLBACK TO SAVEPOINT.
Qué debes recordar
- ROLLBACK cancela cambios pendientes, no cambios ya confirmados.
- Comprueba el resultado antes de elegir entre COMMIT y ROLLBACK.
- Una condición precisa reduce el riesgo, incluso dentro de una transacción.
- Los savepoints permiten retroceder a un punto intermedio.
Conceptos relacionados
Fuentes técnicas
La explicación se ha contrastado con documentación oficial: