Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 4 de 432/57 en el curso~10 min
Lecciones del módulo (4/4)

Transacciones: todo o nada

Una transacción es un grupo de operaciones que la base de datos trata como una sola unidad: o todos triunfan, o ninguno deja una rastro. Así es como te proteges de las inconsistencias cuando una secuencia de UPDATE/INSERT/DELETE debe permanecer consistente.

La sintaxis

SQL
BEGIN;             -- apri la transazione

UPDATE …;
INSERT …;
DELETE …;
SELECT …;          -- puoi anche solo leggere

COMMIT;            -- conferma tutte le modifiche
-- oppure
ROLLBACK;          -- annulla tutte le modifiche, come se nulla fosse

Todo entre BEGIN y COMMIT es atómico: no hay otra conexión ve el estado intermedio. Si el programa falla o se ejecuta ROLLBACK, la base de datos permanece exactamente como estaba antes de BEGIN.

El escenario clásico: el traspaso

El ejemplo canónico es una transferencia de acciones entre productos (o una transferencia de dinero). transferencia entre cuentas): dos UPDATE que deben tener éxito juntos, Nunca uno si y el otro no.

SQL
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 1;
UPDATE products SET stock = stock + 1 WHERE id = 2;
COMMIT;

Si el segundo UPDATE falla (por ejemplo, un error de restricción CHECK), se ROLLBACK restablece el stock del producto 1 a su valor original.

ROLLBACK: el depurador del DBA

SQL
BEGIN;
UPDATE customers SET city = 'X' WHERE id = 1;
SELECT first_name, city FROM customers WHERE id = 1;   -- "vedo come è cambiato"
ROLLBACK;

Un patrón muy útil para probar un UPDATE en datos reales: ejecutarlo, inspeccionar el resultado con un SELECT en la misma transacción, y si no te convence, usa ROLLBACK: la base de datos es exactamente como fue antes.

SAVEPOINT: reversión parcial

Dentro de una transacción puedes crear puntos intermedios:

SQL
BEGIN;
UPDATE customers SET city = 'A' WHERE id = 1;
SAVEPOINT step1;
UPDATE customers SET city = 'B' WHERE id = 2;
-- mi sono accorto che il secondo UPDATE è sbagliato:
ROLLBACK TO SAVEPOINT step1;
COMMIT;     -- solo il primo UPDATE viene confermato

ÁCIDO en 30 segundos

Las transacciones garantizan las propiedades ACID:

  • Atomicidad: todo o nada;
  • Cconsistencia: las restricciones se mantienen satisfechas al inicio y al final de la transacción;
  • Isolación: las transacciones simultáneas no ven estados intermedios (en varios "niveles");
  • Durabilidad: un COMMIT exitoso no se pierde incluso en caso de falla.

Tu turno

Ejercicio#sql.m8.l4.e1
Intentos: 0Cargando...

En una sola transacción: disminuir en 1 el stock del producto 1 e incrementar en 1 el stock del producto 2. Abrir con BEGIN y cerrar con COMMIT.

Cargando editor...
Mostrar pista

Valor de referencia - 1 y valor + 1 en las respectivas cláusulas SET.

Solución disponible después de 3 intentos

Ejercicio de revisión

Ejercicio#sql.m8.l4.e2
Intentos: 0Cargando...

Abra una transacción, intente actualizar la ciudad del cliente con id=1 a 'Sperimentale', luego cancele la operación con ROLLBACK. Al final la ciudad del cliente 1 debe ser la original ('Milano').

Cargando editor...
Mostrar pista

ROLLBACK cancela todos los cambios realizados desde BEGIN en adelante.

Solución disponible después de 3 intentos