Módulo 6 · Modificar datos

Práctica: modifica datos con una transacción

Integra INSERT, UPDATE, DELETE y control de transacciones en un flujo seguro: delimita el cambio, comprueba qué filas has tocado y decide si debes confirmar con COMMIT o volver atrás con ROLLBACK.

35 minNivel repasoAntes necesitas: INSERT, UPDATE/DELETE y transacciones

0 de 45 lecciones

Al terminar, podrás

  • Preparar una modificación comprobable antes de tocar datos reales.
  • Combinar BEGIN, una operación DML y un SELECT de comprobación dentro del mismo flujo.
  • Elegir ROLLBACK cuando la comprobación revela que no quieres conservar el cambio.
  • Usar COMMIT solo 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.

Patrón de trabajo

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

  1. Delimita. Escribe un SELECT con la misma condición que usarás en UPDATE o DELETE.
  2. Abre. Inicia una transacción explícita antes de la modificación.
  3. Modifica. Ejecuta una sola intención a la vez para que sea fácil razonar sobre el efecto.
  4. Comprueba. Vuelve a consultar las filas afectadas y compara el resultado con lo que esperabas.
  5. Decide. Usa COMMIT si el resultado es correcto o ROLLBACK si 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:

SQL
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:

SQL
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.

Comprueba tu comprensión

Has ejecutado un UPDATE dentro de una transacción y el SELECT de comprobación muestra más filas de las previstas. ¿Qué acción es la más segura?

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

Pendiente

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…

La consulta usa datos ficticios y se ejecuta solo en este navegador.

Ronda autónoma: esta vez decide confirmar

Intermedia · decisión completa

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.

Si te bloqueas, vuelve al flujo de cinco pasos

  1. Escribe primero el SELECT que identifica las filas.
  2. Copia su condición WHERE en el UPDATE o DELETE.
  3. Coloca BEGIN justo antes de la modificación.
  4. Repite el SELECT dentro de la transacción.
  5. Termina con COMMIT si el resultado es correcto o con ROLLBACK si 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 WHERE correcto.
  • ROLLBACK es una decisión útil cuando el ensayo no debe conservarse.
  • COMMIT debe 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.

Conceptos relacionados