Ir al contenido
wannacode

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:

SQLbase de datos: tienda

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:

SQLbase de datos: tienda

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:

SQLbase de datos: tienda

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:

SQLbase de datos: tienda

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.

SQLbase de datos: tienda

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

SQLbase de datos: tienda

Test

Ponte a prueba

1. Una transacción se detuvo con un error en la tercera de cinco consultas y se deshizo. ¿Qué queda en la base de datos?
2. ¿Qué letra de ACID promete que, después de COMMIT, el pedido no desaparecerá en un corte de luz?
3. Un INSERT con tres filas, la tercera de las cuales rompe una regla. ¿Cuántas filas entran?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·