Ejercicio 1 — MVCC con 3 sesiones
Tres sesiones concurrentes. Avanza paso a paso para ver las versiones activas, el estado de cada transacción y qué devuelven las SELECTs.
Configuración inicial
create table coches (id varchar(4) primary key, marca varchar(50), modelo varchar(50));
insert into coches values ('AA1','Renault','Megane'), ('AA2','Toyota','Yaris');
COMMIT; -- T0
Paso: 10
Paso
Sesión 1 READ COMMITTED
Sesión 2 SERIALIZABLE
Sesión 3 SERIALIZABLE
Tabla de Transacciones
| Tx | Estado | Aislamiento | ts_inicio | ts_fin |
|---|
Versiones de Filas
| id | marca | modelo | ts_inicio | Borrada |
|---|
Ejercicio 2 — FOR UPDATE y FK
Dos sesiones en READ COMMITTED. Analiza el impacto del FOR UPDATE y el orden de ejecución de los DELETEs por restricción de FK.
Configuración inicial
create table estaciones_carga (id numeric(8) primary key, nombre varchar(50), total_kwh numeric(12,2)); create table recargas (id numeric(8) primary key, estacion_carga numeric(8) references estaciones_carga, matricula varchar(8), kwh numeric(8,2), precio numeric(8,2)); insert into estaciones_carga values (20, 'H. Landa Burgos', 50.25); insert into recargas values (100, 20, '8888 PSA', 50.25, 28.80); COMMIT;
Pregunta A — ¿Con o sin FOR UPDATE?
Sin FOR UPDATE — el paso 11 no espera.
| Paso 14 → total_kwh |
|---|
| 60.20 (UPDATE de T2 ya committed antes de la subconsulta) |
Con FOR UPDATE — el paso 11 espera hasta el COMMIT del paso 15.
| Paso 14 → total_kwh |
|---|
| 50.25 (la subconsulta del paso 13 no ve el UPDATE pendiente) |
Paso: 10
Paso
Sesión 1 READ COMMITTED
Sesión 2 READ COMMITTED
Pregunta B — Orden pasos 16-19
Orden real: 16 → 19 → 17 → 18
El DELETE del paso 17 intenta borrar de
El DELETE del paso 17 intenta borrar de
estaciones_carga la estación 20, pero hay filas en recargas que la referencian (FK). Hasta que el paso 16 (DELETE en recargas) haga COMMIT (paso 19), el paso 17 ESPERA. Una vez committed el 16, la FK ya no bloquea y el 17 puede ejecutarse, finalizando con el COMMIT del 18.
Quiz de Práctica
Pon a prueba lo que has aprendido. Selecciona la respuesta correcta en cada pregunta.