⚡ Transacciones & MVCC — UBU GII-3º

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

TxEstadoAislamientots_iniciots_fin

Versiones de Filas

idmarcamodelots_inicioBorrada

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

0 / 0