ACID: todo o nada
En resumen: Una transacción convierte varias consultas en una unidad que ocurre completa o no ocurre, y ACID nombra sus cuatro promesas: atomicidad, consistencia, aislamiento y durabilidad.
Problema
El pedido que se detuvo a la mitad
Teodora pide dos panes y algo que el programa sacó de una cesta vieja: el producto 99, que ya no existe. El programa hace el pedido en dos consultas: primero el pedido en sí, luego sus líneas. Ejecútalas:
La segunda consulta se detiene con un error: el producto 99 no existe. Pero la primera ya pasó. En la base de datos queda el pedido 61 sin una sola línea:
Un pedido de 0 productos. El mensajero recibirá una bolsa vacía, y los informes contarán un pedido de más. Lo mismo pasa si el servidor se detiene entre las dos consultas.
La idea
Una transacción
La acción «hacer un pedido» son varias consultas que tienen sentido solo juntas. Una transacción las convierte en un todo:
BEGIN;la inicia.COMMIT;la confirma: todo entra de una vez.ROLLBACK;la cancela: como si no hubiera pasado nada.
Aquí está el pedido completo: el pedido, sus dos líneas y las existencias, en una transacción:
Si alguna consulta entre BEGIN y COMMIT falla, el programa dice ROLLBACK y la base de datos vuelve a como estaba. Aquí está la cancelación:
Siguen siendo 60 pedidos. El pedido 61 existió solo dentro de la transacción.
Pruébalo
Deshazlo
Un colega inició una transacción y borró todas las reseñas. Añade una línea que deshaga el borrado, antes del conteo.
Solución
BEGIN;
DELETE FROM reviews;
ROLLBACK;
SELECT COUNT(*) AS reviews FROM reviews;ROLLBACK; antes del SELECT. Vuelve a haber 16 reseñas. Con COMMIT; se habrían ido para siempre.
La idea
ACID
Las bases de datos prometen cuatro cosas sobre las transacciones. Por las primeras letras se llama ACID:
- Atomicity (atomicidad). Todo o nada. No puede quedar un pedido sin líneas.
- Consistency (consistencia). Después de la transacción se cumplen todas las reglas de la base de datos: claves,
CHECK,UNIQUE. - Isolation (aislamiento). Dos transacciones que se ejecutan al mismo tiempo no se estorban, como si se ejecutaran una tras otra. Hasta dónde llega eso lo veremos en la lección sobre el trabajo simultáneo.
- Durability (durabilidad). Después de
COMMITel cambio está en el disco. Un corte de luz no lo borra.
Más precisamente, para curiosos
Cada consulta por separado ya es una pequeña transacción: un INSERT con tres filas, una de las cuales rompe una regla, no mete ninguna. Por eso en el primer campo la línea del pan tampoco entró. Los problemas empiezan cuando una acción necesita varias consultas. Entonces el programa escribe BEGIN y COMMIT.
Ejercicio
El pedido de Yavor
Yavor (cliente 20) pide 1 paquete de café en grano (producto 17, 14,90 €). Crea el pedido 61 con la fecha de hoy (2026-10-25) y el estado new, su línea, y reduce las existencias, todo en una transacción.
Solución
BEGIN;
INSERT INTO orders (id, customer_id, ordered_at, status) VALUES (61, 20, '2026-10-25', 'new');
INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES (61, 17, 1, 14.9);
UPDATE products SET stock = stock - 1 WHERE id = 17;
COMMIT;Tres consultas entre BEGIN; y COMMIT;: el pedido, la línea, las existencias. La comprobación mira el pedido 61 con su línea y las nuevas existencias de café: 14.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: LEFT JOIN: también las filas sin pareja · INSERT: insertar filas · UPDATE: cambiar valores · DELETE: borrar filas
- Continúa en: BEGIN, COMMIT, ROLLBACK · Transacciones simultáneas · Triggers · Migraciones del esquema
- Ejercicios sobre el tema: Transacciones