Al terminar, podrás
- Preparar una modificación comprobable antes de tocar datos reales.
- Combinar
BEGIN, una operación DML y unSELECTde comprobación dentro del mismo flujo. - Elegir
ROLLBACKcuando la comprobación revela que no quieres conservar el cambio. - Usar
COMMITsolo después de verificar que el alcance y el resultado son los esperados.
Recupera lo aprendido: ¿Cuál es la diferencia entre confirmar una transacción y descartar sus cambios?
La idea clave: modificar, comprobar y decidir
El patrón más seguro no es «escribir un UPDATE y confiar». Separa la tarea en pasos observables. Primero identifica exactamente las filas que deberían cambiar. Después inicia la transacción, ejecuta la modificación y consulta esas filas otra vez. Solo entonces eliges entre conservar el resultado o volver al estado anterior.
SELECT de alcance → BEGIN → cambio → SELECT de comprobación → COMMIT o ROLLBACK. En una aplicación real, la forma de iniciar la transacción y el autocommit dependen del motor y del cliente, pero la decisión pedagógica es la misma: no confirmes un cambio que todavía no has revisado.
Convierte una modificación en una secuencia verificable
- Delimita. Escribe un
SELECTcon la misma condición que usarás enUPDATEoDELETE. - Abre. Inicia una transacción explícita antes de la modificación.
- Modifica. Ejecuta una sola intención a la vez para que sea fácil razonar sobre el efecto.
- Comprueba. Vuelve a consultar las filas afectadas y compara el resultado con lo que esperabas.
- Decide. Usa
COMMITsi el resultado es correcto oROLLBACKsi quieres descartarlo.
Ejemplo guiado: prueba un cambio y deshazlo
El pedido 105 está pendiente. Imagina que estás comprobando un cambio de estado antes de confirmarlo. Primero verifica el alcance:
SELECT id, estado, total
FROM pedidos
WHERE id = 105;Con los datos de práctica obtienes una sola fila: 105 · pendiente · 69.9. Ahora ejecuta el cambio dentro de una transacción, compruébalo y decide deshacerlo:
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 105;
SELECT id, estado, total
FROM pedidos
WHERE id = 105;
ROLLBACK;Durante la transacción, la comprobación muestra el estado enviado. Después de ROLLBACK, el cambio queda descartado y el pedido vuelve a pendiente. La utilidad del ejercicio no es «usar ROLLBACK siempre», sino practicar una decisión consciente antes de confirmar.
Un error habitual
Tratar la transacción como sustituto de un WHERE preciso
BEGIN y ROLLBACK reducen el riesgo mientras revisas, pero no hacen correcta una condición incorrecta. Si confirmas con COMMIT un UPDATE demasiado amplio, la transacción ya no puede deshacer mágicamente esa decisión.
Mejor hábito: ejecuta antes un SELECT con la misma condición y vuelve a comprobar dentro de la transacción.
En este laboratorio el bloque se ejecuta completo y cada intento vuelve a los datos iniciales. La comprobación muestra el estado final después de ROLLBACK. Para inspeccionar cambios y decidir interactivamente antes de confirmarlos, utiliza una sesión de un motor SQL real.
Práctica guiada: cambia, verifica y vuelve atrás
Usa el pedido 105. El objetivo es practicar una reversión deliberada: abre una transacción, cambia el estado a enviado, consulta el pedido para comprobarlo y termina con ROLLBACK. El laboratorio verificará que el estado final vuelve a ser pendiente.
Laboratorio SQL
Ensaya una modificación reversible
Inicia una transacción, cambia únicamente el pedido 105 a enviado, comprueba id y estado de esa fila con SELECT y termina con ROLLBACK. Al terminar, todos los datos deben seguir como al principio.
Resultado esperado: 1 fila, id 105 y estado pendiente.
Ver tablas y datos
Cargando la estructura del ejercicio…
Empieza con BEGIN y conserva WHERE id = 105 en el UPDATE.
Antes de cerrar la transacción, ejecuta un SELECT id, estado FROM pedidos WHERE id = 105.
Esta vez el objetivo es descartar el ensayo: termina con ROLLBACK, no con COMMIT.
Solución
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 105;
SELECT id, estado
FROM pedidos
WHERE id = 105;
ROLLBACK;El SELECT te permite inspeccionar el cambio antes de decidir. ROLLBACK restaura el estado anterior, por eso la validación final vuelve a encontrar el pedido como pendiente.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu secuencia funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Ronda autónoma: esta vez decide confirmar
Confirma solo una fila
El pedido 109 está pendiente. Escribe una secuencia que compruebe primero esa fila, abra una transacción, cambie únicamente su estado a enviado, vuelva a comprobarla y termine con COMMIT.
COMMIT solo si la segunda comprobación muestra exactamente el pedido 109 como enviado.Solución razonada
SELECT id, estado
FROM pedidos
WHERE id = 109;
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 109;
SELECT id, estado
FROM pedidos
WHERE id = 109;
COMMIT;La primera consulta valida el alcance antes de modificar. La segunda confirma el resultado dentro de la transacción. Solo después aparece COMMIT, que expresa una decisión consciente de conservar el cambio.
Si te bloqueas, vuelve al flujo de cinco pasos
- Escribe primero el
SELECTque identifica las filas. - Copia su condición
WHEREen elUPDATEoDELETE. - Coloca
BEGINjusto antes de la modificación. - Repite el
SELECTdentro de la transacción. - Termina con
COMMITsi el resultado es correcto o conROLLBACKsi no quieres conservarlo.
Si dudas sobre cómo delimitar filas, repasa UPDATE y DELETE con seguridad. Si la duda es qué hacen COMMIT y ROLLBACK, vuelve a transacciones.
Fuentes técnicas consultadas
La práctica usa el patrón común de una transacción explícita que termina en confirmación o reversión. La sintaxis exacta de inicio, el autocommit y algunos detalles de error o concurrencia dependen del motor.
Comprueba si puedes explicarlo
El pedido 105 aparece como enviado durante la transacción y como pendiente al terminar con ROLLBACK. ¿Es contradictorio?
Ver respuesta razonada
No. Dentro de la transacción ves tu cambio pendiente. ROLLBACK lo descarta y recupera el estado inicial. La comprobación intermedia y la final corresponden a momentos distintos.
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
- Comprueba el alcance antes de modificar y el resultado antes de confirmar.
- Una transacción no sustituye un
WHEREcorrecto. ROLLBACKes una decisión útil cuando el ensayo no debe conservarse.COMMITdebe aparecer después de la comprobación, no por inercia.
A continuación: deja de modificar filas y empieza a diseñar la estructura que las contiene.