Ir al contenido principal
¿Te ayudamos?
oposiciones · tai

Transacciones SQL: 8 ejercicios de COMMIT y ROLLBACK

14 min de lectura

Practica transacciones SQL con ocho casos ejecutados en SQLite: COMMIT, ROLLBACK, SAVEPOINT y RELEASE. Incluye estados finales y explicaciones.

Para resolver ejercicios de transacciones SQL, sigue el estado de los datos y los límites de la transacción. Reconocer las palabras COMMIT y ROLLBACK no basta cuando entre medias aparece un SAVEPOINT o se abre una segunda transacción.

Aquí tienes ocho casos originales, con cuatro alternativas y resultados ejecutados en SQLite. Todos usan una tabla ficticia de existencias. Cada ejercicio empieza de nuevo: el resultado del anterior no se arrastra al siguiente.

Condiciones y datos iniciales

La práctica utiliza SQLite, una sola conexión, sin concurrencia, errores de ejecución ni disparadores. La inicialización está terminada y confirmada antes de cada caso. El cliente debe enviar las sentencias mostradas sin envolverlas en otra transacción ni insertar confirmaciones adicionales.

En una base de prácticas vacía, crea estos datos:

CREATE TABLE stock (
  item TEXT PRIMARY KEY,
  units INTEGER NOT NULL
);

INSERT INTO stock (item, units) VALUES
  ('A', 10),
  ('B', 20);

El estado inicial de cada ejercicio es:

itemunits
A10
B20

Para repetir un caso, crea otra base vacía e inicialízala de nuevo. No vuelvas a ejecutar el CREATE TABLE sobre la misma tabla ya creada. Tampoco pruebes los scripts sobre datos de trabajo.

Las letras A y B de las filas identifican artículos. Las letras de las alternativas identifican respuestas: cuando una opción diga «A = 8; B = 20», se refiere a las unidades de los artículos, en ese orden.

Qué hace cada instrucción en este cuaderno

La documentación de transacciones de SQLite distingue el inicio explícito con BEGIN y el cierre mediante COMMIT o ROLLBACK. Aquí todas las operaciones terminan correctamente; no se presupone que cualquier error de cualquier gestor deshaga siempre toda una transacción.

La documentación de SAVEPOINT de SQLite explica que ROLLBACK TO vuelve a una marca sin cancelar la transacción, conserva esa marca y elimina las posteriores. RELEASE quita marcas; liberar una interna a un BEGIN no confirma por separado sus cambios frente a un ROLLBACK exterior.

Usaremos los puntos de guardado solo dentro de un BEGIN explícito. No generalices el comportamiento de RELEASE a un SAVEPOINT que sea la transacción exterior: ese caso no forma parte de estos ejercicios.

Método: datos, marcas y confirmación

En una hoja, escribe tres columnas: sentencia, valores actuales y marca relevante. Después de cada UPDATE anota el valor nuevo. Al encontrar una marca, conserva el estado al que podrías volver; al confirmar o deshacer toda la transacción, cierra ese tramo antes de seguir.

No taches mentalmente una modificación por el mero hecho de que exista un punto de guardado: crear la marca no revierte nada. Tampoco conviertas RELEASE en un COMMIT general si el BEGIN exterior sigue abierto.

En todos los casos se pregunta por las dos filas del SELECT final, ordenadas por item. Resuelve antes de desplegar la solución y comprueba tanto el valor de A como el de B.

Ejercicio 1. Un cambio confirmado

¿Qué unidades devuelve el SELECT final después de confirmar el cambio?

BEGIN;
UPDATE stock SET units = units - 3 WHERE item = 'A';
COMMIT;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 10; B = 20.
  • B. A = 10; B = 17.
  • C. A = 7; B = 23.
  • D. A = 7; B = 20.
Ver solución del ejercicio 1

Correcta: D.

itemunits
A7
B20

La modificación afecta solo al artículo A: 10 − 3 = 7. B conserva sus 20 unidades. COMMIT confirma ese estado antes de la consulta.

La opción A ignora la modificación; B descuenta unidades del artículo equivocado; C añade tres a B aunque no existe una sentencia que lo haga. No inventes una compensación automática: el programa solo contiene un UPDATE sobre A. La confirmación no realiza una operación de negocio adicional.

Ejercicio 2. Deshacer dos modificaciones

¿Qué estado queda tras el ROLLBACK completo?

BEGIN;
UPDATE stock SET units = units - 3 WHERE item = 'A';
UPDATE stock SET units = units + 3 WHERE item = 'B';
ROLLBACK;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 10; B = 20.
  • B. A = 7; B = 23.
  • C. A = 7; B = 20.
  • D. A = 10; B = 23.
Ver solución del ejercicio 2

Correcta: A.

itemunits
A10
B20

Antes del cierre, los valores intermedios son A = 7 y B = 23. ROLLBACK sin TO deshace los dos UPDATE de la transacción, y la consulta vuelve a encontrar A = 10 y B = 20.

B conserva ambos cambios pendientes; C o D conserva solo uno. Ninguno refleja el alcance del ROLLBACK mostrado. La pregunta no plantea un fallo entre dos sentencias ni una reversión automática por error: ordena expresamente deshacer la transacción completa.

Ejercicio 3. Volver a una marca intermedia

El cambio de A precede al punto p. ¿Qué valores quedan después de volver a p y confirmar?

BEGIN;
UPDATE stock SET units = 8 WHERE item = 'A';
SAVEPOINT p;
UPDATE stock SET units = 25 WHERE item = 'B';
ROLLBACK TO p;
COMMIT;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 10; B = 20.
  • B. A = 8; B = 20.
  • C. A = 8; B = 25.
  • D. A = 10; B = 25.
Ver solución del ejercicio 3

Correcta: B.

itemunits
A8
B20

La marca p se crea cuando A ya vale 8 y B sigue en 20. El UPDATE posterior lleva B a 25. ROLLBACK TO p recupera el estado de la marca: A = 8 y B = 20. El COMMIT final confirma ese resultado.

A confunde volver a p con volver al inicio del BEGIN. C ignora la reversión de B. D conserva el cambio posterior y elimina el anterior, justo al contrario de la frontera indicada. Marca en el código qué UPDATE queda antes de p y cuál después.

Ejercicio 4. Liberar una marca no impide el ROLLBACK exterior

¿Qué devuelve la consulta si se libera p y después se deshace el BEGIN?

BEGIN;
UPDATE stock SET units = 8 WHERE item = 'A';
SAVEPOINT p;
UPDATE stock SET units = 25 WHERE item = 'B';
RELEASE p;
ROLLBACK;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 8; B = 25.
  • B. A = 8; B = 20.
  • C. A = 10; B = 20.
  • D. A = 10; B = 25.
Ver solución del ejercicio 4

Correcta: C.

itemunits
A10
B20

Tras RELEASE p, los valores actuales siguen siendo A = 8 y B = 25, y el BEGIN exterior permanece abierto. El ROLLBACK siguiente deshace sus modificaciones: vuelve A = 10 y B = 20.

A trata la liberación de una marca interna como una confirmación independiente. B deshace solo lo posterior a p, pero no aparece ROLLBACK TO p; D conserva únicamente B. Para decidir, distingue el objeto de cada cierre: aquí se libera una marca y después se revierte toda la transacción.

Ejercicio 5. Seguir trabajando después de ROLLBACK TO

Después de recuperar p se ejecuta otro UPDATE. ¿Qué valores se confirman?

BEGIN;
UPDATE stock SET units = 8 WHERE item = 'A';
SAVEPOINT p;
UPDATE stock SET units = 6 WHERE item = 'A';
ROLLBACK TO p;
UPDATE stock SET units = units + 1 WHERE item = 'A';
COMMIT;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 10; B = 20.
  • B. A = 7; B = 20.
  • C. A = 9; B = 20.
  • D. A = 8; B = 20.
Ver solución del ejercicio 5

Correcta: C.

itemunits
A9
B20

En p, A vale 8. El valor 6 se descarta al volver a la marca. La instrucción siguiente suma una unidad al valor recuperado: 8 + 1 = 9. B no cambia y el COMMIT confirma A = 9, B = 20.

A vuelve injustificadamente al dato inicial; B suma uno al valor 6 que ya se había deshecho; D olvida el último UPDATE. ROLLBACK TO no termina la ejecución del programa ni omite las sentencias que vienen a continuación.

Ejercicio 6. Dos transacciones separadas

La primera transacción se confirma; la segunda se revierte. ¿Qué estado devuelve el SELECT?

BEGIN;
UPDATE stock SET units = 8 WHERE item = 'A';
COMMIT;
BEGIN;
UPDATE stock SET units = 1 WHERE item = 'A';
UPDATE stock SET units = 2 WHERE item = 'B';
ROLLBACK;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 1; B = 2.
  • B. A = 8; B = 20.
  • C. A = 10; B = 20.
  • D. A = 8; B = 2.
Ver solución del ejercicio 6

Correcta: B.

itemunits
A8
B20

El primer COMMIT fija A = 8 y B = 20. Ese es el estado de partida de la segunda transacción, aunque no sea el estado inicial de toda la práctica. Al revertir la segunda, se descartan A = 1 y B = 2, y reaparecen los valores 8 y 20.

A ignora el ROLLBACK; C pretende deshacer también una transacción ya confirmada; D conserva solo el cambio de B de la segunda. Dibuja una línea de cierre después del primer COMMIT: el ROLLBACK posterior no cruza esa frontera para borrar la confirmación anterior.

Ejercicio 7. Una marca a la que se vuelve dos veces

En SQLite, ¿qué estado queda al usar dos veces ROLLBACK TO sobre el mismo punto?

BEGIN;
UPDATE stock SET units = 9 WHERE item = 'A';
SAVEPOINT p;
UPDATE stock SET units = 6 WHERE item = 'A';
ROLLBACK TO p;
UPDATE stock SET units = 4 WHERE item = 'A';
ROLLBACK TO p;
COMMIT;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 9; B = 20.
  • B. A = 4; B = 20.
  • C. A = 6; B = 20.
  • D. A = 10; B = 20.
Ver solución del ejercicio 7

Correcta: A.

itemunits
A9
B20

La marca p contiene A = 9 y B = 20. El primer retorno elimina el valor 6 y conserva p. El segundo elimina el valor 4 y vuelve al mismo estado. El COMMIT deja A = 9 y B = 20.

B ignora la segunda reversión; C retiene un estado descartado por la primera; D confunde la marca con el inicio del BEGIN. La clave de este caso es que, en SQLite, ROLLBACK TO p no elimina la propia marca p. No equivale a RELEASE p.

Ejercicio 8. Volver a la marca anterior entre dos marcas

Se crean p y después q. ¿Qué estado queda al volver a p, modificar B y confirmar?

BEGIN;
UPDATE stock SET units = 8 WHERE item = 'A';
SAVEPOINT p;
UPDATE stock SET units = 23 WHERE item = 'B';
SAVEPOINT q;
UPDATE stock SET units = 4 WHERE item = 'A';
ROLLBACK TO p;
UPDATE stock SET units = units + 1 WHERE item = 'B';
RELEASE p;
COMMIT;
SELECT item, units FROM stock ORDER BY item;
  • A. A = 4; B = 24.
  • B. A = 8; B = 24.
  • C. A = 10; B = 21.
  • D. A = 8; B = 21.
Ver solución del ejercicio 8

Correcta: D.

itemunits
A8
B21

En p, A vale 8 y B vale 20. Volver a p descarta tanto el cambio de B a 23 como el de A a 4, y elimina la marca posterior q. Desde ese estado se suma una unidad a B: queda 21. RELEASE p no altera los valores, y COMMIT los confirma.

A mantiene los dos cambios que se debían deshacer y luego suma uno a B. B deshace solo A y parte de 23 para el incremento. C retrocede demasiado, hasta el A inicial de 10. La frontera solicitada es p, no q ni el comienzo de la transacción.

Clave y revisión de fallos

La clave es 1D, 2A, 3B, 4C, 5C, 6B, 7A y 8D. No es un baremo oficial ni una equivalencia con el resultado de una oposición.

EjerciciosPregunta que conviene hacerse
1 y 2¿Se confirma o se deshace la transacción completa?
3 y 5¿Qué valores había al crear p y qué ocurre después de volver?
4¿Se ha liberado una marca interna o se ha confirmado el BEGIN?
6¿Dónde termina la primera transacción y empieza la segunda?
7¿Sigue existiendo p tras volver a ella?
8¿Se vuelve a p o a q y desde qué valores se continúa?

Al repetir, cambia una sola asignación numérica y recorre de nuevo los estados. Si modificas un UPDATE que después se deshace, puede que el resultado final no cambie. Explicar por qué no cambia es tan útil como acertar una cifra distinta.

Estos casos no prueban aislamiento entre conexiones, recuperación ante fallos ni políticas de errores. Tampoco estudian qué hace cada cliente con una transacción abierta. Para responder sobre esas materias hacen falta otras condiciones y, cuando corresponda, otro experimento.

Continúa con consultas y restricciones

Para trabajar las filas que devuelve una consulta tienes los ocho ejercicios SQL de JOIN, NULL y GROUP BY. Para comprobar qué datos admite una tabla, sigue con los casos de claves primarias y foráneas. Consultar, restringir y confirmar cambios son tareas relacionadas, pero no intercambiables.

El Pack Temario TAI 2027 es un producto de pago que incluye contenidos sobre sistemas gestores, transacciones y SQL. Revisa su ficha para valorar el alcance. Esta práctica gratuita cubre únicamente los programas y condiciones mostrados; el nombre de la edición no sustituye la convocatoria que resulte aplicable.

Preguntas frecuentes

¿COMMIT y ROLLBACK hacen lo mismo?

No. En estos casos, COMMIT confirma los cambios de la transacción y ROLLBACK sin TO los deshace. Ambos cierran la transacción explícita, pero dejan estados distintos cuando había modificaciones pendientes.

¿ROLLBACK TO termina la transacción?

No en SQLite. Vuelve al estado del punto de guardado indicado y mantiene la transacción activa. Los ejercicios continúan con nuevas operaciones antes de la confirmación final.

¿RELEASE de un SAVEPOINT interno equivale a confirmar toda la operación?

No. En los casos de esta práctica el punto de guardado está dentro de un BEGIN todavía abierto. Su liberación no impide que un ROLLBACK posterior de esa transacción deshaga los cambios.

¿Se han ejecutado estos ejercicios en todos los gestores SQL?

No. Se han comprobado en SQLite, con control explícito de las transacciones y una conexión por caso. No prueban concurrencia, políticas de errores, procedimientos almacenados ni el comportamiento de cualquier otro gestor.

¿Son preguntas de un examen oficial de TAI?

No. Los datos, programas y alternativas son originales. Sirven para practicar una parte de bases de datos; no reproducen un examen ni establecen una nota de corte o una previsión de preguntas.

Artículos relacionados

DNS para TAI: registros y 8 ejercicios resueltos

Practica A, AAAA, CNAME, MX, PTR y NS con ocho ejercicios DNS para TAI. Resuelve TTL, NODATA y transporte TCP con soluciones explicadas y fuentes RFC.

Claves primarias y foráneas en SQL: 6 casos resueltos

Practica claves primarias, foráneas y compuestas con seis casos ejecutados en SQLite: inserciones, NULL, RESTRICT, CASCADE y estados finales.

Condiciones booleanas TAI: 12 ejercicios de lógica

Practica tablas de verdad, AND, OR, XOR, De Morgan y condiciones de programación con doce ejercicios originales para TAI y soluciones comprobadas.