Al terminar, podrás
- Explicar la diferencia entre COMMIT y ROLLBACK.
- Comprobar cambios dentro de una transacción.
- Reconocer por qué una transacción no sustituye a WHERE.
- Distinguir el fallo de una sentencia del ROLLBACK de toda la transacción.
Recupera lo aprendido: ¿Cómo comprobarías qué filas va a modificar un UPDATE antes de ejecutarlo?
La idea clave
Una transacción convierte varias sentencias en una unidad de trabajo. COMMIT confirma los cambios; ROLLBACK deshace los cambios aún no confirmados. El punto de decisión debe llegar después de comprobar el estado resultante.
Una transacción no corrige una condición equivocada: ofrece la posibilidad de revisar y deshacer antes de confirmar.
La sintaxis básica
BEGIN;
-- cambios
-- SELECT de comprobación
COMMIT; -- o ROLLBACK;En el laboratorio usamos BEGIN, sintaxis válida en SQLite y PostgreSQL. MySQL documenta START TRANSACTION para iniciar una transacción explícita y SQL Server utiliza BEGIN TRANSACTION. COMMIT y ROLLBACK conservan la misma idea general, pero revisa siempre la sintaxis y el comportamiento de tu motor.
Ejemplo paso a paso
Probaremos el cambio del pedido 102 y lo desharemos. Después del ROLLBACK, la fila debe recuperar el estado pendiente.
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 102;
SELECT id, estado
FROM pedidos
WHERE id = 102;
ROLLBACK;
SELECT id, estado
FROM pedidos
WHERE id = 102;| id | estado |
|---|---|
| 102 | pendiente |
Cómo funciona
BEGINabre una transacción explícita.- La lectura intermedia permite revisar el cambio antes de decidir.
ROLLBACKrestaura el estado inicial porque todavía no huboCOMMIT.
Un error habitual
Confirmar sin comprobar el alcance
BEGIN;
UPDATE pedidos SET estado = 'enviado';
COMMIT;La transacción agrupa el error, pero el COMMIT confirma la actualización de todas las filas. Antes de confirmar, revisa un recuento o las claves afectadas.
Detalle por motor: ¿qué pasa si una sentencia falla?
Un error de una sentencia y un ROLLBACK de toda la transacción no son lo mismo. En SQLite, por ejemplo, una violación de restricción con el comportamiento predeterminado ABORT cancela los cambios de la sentencia que falla, pero puede dejar pendientes sentencias anteriores de la misma transacción.
BEGIN;
UPDATE productos
SET stock = stock + 1
WHERE id = 2;
-- Esta sentencia falla por una restricción.
UPDATE productos
SET stock = CASE WHEN id = 2 THEN 77 ELSE NULL END
WHERE id IN (2, 3);
ROLLBACK;No generalices este detalle a todos los errores ni a todos los motores. Para el modelo mental inicial, separa siempre sentencia fallida, transacción todavía activa y ROLLBACK explícito.
Cómo interpretar este laboratorio: cada intento ejecuta el bloque completo sobre una copia inicial. Si escribes COMMIT al final, se ejecutará sin esperar tu revisión humana. Aquí ensayas la secuencia; en una sesión real ejecuta hasta el SELECT, inspecciona el resultado y envía después COMMIT o ROLLBACK por separado.
Practica con datos
Laboratorio SQL
Resuelve la consulta
Escribe un bloque que inicie una transacción, cambie únicamente el pedido 102 a enviado, incluya un SELECT de comprobación de esa fila y termine con COMMIT. El resto de los datos debe conservarse.
Resultado esperado: 1 fila con id, estado.
Ver tablas y datos
Cargando la estructura del ejercicio…
Empieza con BEGIN.
Incluye un SELECT de comprobación.
Finaliza con COMMIT solo después de revisar.
Solución
BEGIN; UPDATE pedidos SET estado = 'enviado' WHERE id = 102; SELECT * FROM pedidos WHERE id = 102; COMMIT;La transacción aporta un punto de decisión, pero no sustituye una condición correcta.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Fuentes técnicas consultadas
Las fuentes coinciden en la finalidad de COMMIT y ROLLBACK, pero los modos de autocommit, la sintaxis de inicio y el comportamiento de ciertas operaciones DDL dependen del motor. Esta lección practica cambios DML explícitos.
- PostgreSQL: tutorial de transacciones
- SQLite: transacciones
- SQLite: resolución de conflictos y comportamiento ABORT
- MySQL 8.4: START TRANSACTION, COMMIT y ROLLBACK
- SQL Server: transacciones
Comprueba si puedes explicarlo
Has ejecutado UPDATE y luego COMMIT. ¿Un ROLLBACK posterior recupera el estado anterior?
Ver respuesta razonada
No. ROLLBACK descarta cambios de una transacción todavía pendiente. Después de COMMIT necesitarías una nueva operación de corrección o un mecanismo de recuperación.
Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.
Qué debes recordar
- BEGIN abre un espacio de trabajo que termina con COMMIT o ROLLBACK.
- Comprueba las filas afectadas antes de confirmar.
- Una sentencia fallida no equivale necesariamente a deshacer toda la transacción; comprueba el comportamiento del motor y del tipo de error.
- Las reglas de autocommit y concurrencia cambian según el motor.
A continuación: integra modificación y transacciones en una práctica de decisión completa.