Módulo 6 · Modificar datos

Controla cambios con COMMIT y ROLLBACK

Agrupa cambios, compruébalos y decide si deben guardarse o deshacerse.

22 minNivel IntermedioAntes necesitas: INSERT, UPDATE y DELETE

0 de 45 lecciones

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

Patrón de revisión
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.

Transacción comprobada
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;
Resultado después de ROLLBACK
idestado
102pendiente

Cómo funciona

  1. BEGIN abre una transacción explícita.
  2. La lectura intermedia permite revisar el cambio antes de decidir.
  3. ROLLBACK restaura el estado inicial porque todavía no hubo COMMIT.
Comprueba tu comprensión

¿Cuándo debe ejecutarse COMMIT?

Un error habitual

Confirmar sin comprobar el alcance

Consulta problemática
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.

Ejemplo para estudiar después del flujo básico
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

Pendiente

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…

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.

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.

Conceptos relacionados