Todo o nada
Restar de una cuenta y sumar a otra son dos pasos. Si algo falla en medio, el dinero no puede desaparecer. Al terminar sabrás cómo lo garantiza la base de datos.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
Una transferencia son dos pasos
Pasar Q30 de la cuenta de Ana a la de Beto parece una sola acción, pero para la base de datos son dos escrituras: restar 30 a Ana y sumar 30 a Beto. Entre una y otra puede pasar cualquier cosa: se va la luz, se cae el programa o Ana no tenía saldo suficiente.
Si el sistema se detiene justo en medio, Ana ya perdió Q30 y Beto nunca los recibió. El dinero desaparece. Eso no puede pasar.
02 · La ideaUna unidad lógica de trabajo
Una transacción agrupa varias operaciones para que la base de datos las trate como una sola: o se hacen todas, o no se hace ninguna. Tú le indicas dónde empieza y dónde termina:
BEGIN TRANSACTION: a partir de aquí, todo forma parte de la misma unidad.COMMIT: confirma. Los cambios quedan permanentes y los demás ya pueden verlos.ROLLBACK: deshace. La base de datos vuelve a como estaba antes delBEGIN, como si la transacción nunca hubiera existido.
Es como pagar con tarjeta: o se descuenta de tu cuenta y le llega a la tienda, o no pasa ninguna de las dos cosas.
Ejecuta la transferencia paso a paso y corta la luz cuando quieras. Compara qué queda al volver a encender, con y sin transacción.
Las cuatro garantías: ACID
- Atomicidad. Todo o nada: o todas las operaciones se reflejan en la base de datos, o ninguna, aunque el sistema falle a la mitad.
- Consistencia. Si la base de datos estaba correcta antes, sigue correcta después. Una transferencia no crea ni destruye dinero, y las reglas, como “el saldo no puede ser negativo”, se respetan.
- Aislamiento. Aunque muchas transacciones corran al mismo tiempo, cada una se comporta como si estuviera sola. Lo que T1 cambió no lo ve T2 hasta que T1 hace
COMMIT. - Durabilidad. Después de un
COMMITexitoso, los cambios permanecen aunque el sistema se caiga un segundo después.
Además, cuando varias transacciones se intercalan, el resultado debe ser el mismo que si se hubieran ejecutado una tras otra en algún orden. A eso se le llama ejecución seriable, y lo verás a fondo más adelante.
Antes de cambiar un dato, la base de datos anota en una bitácora qué transacción lo cambia, el valor anterior y el valor nuevo. Con el valor anterior puede deshacer; con el nuevo, rehacer. Todo se escribe primero en la bitácora y después en los datos.
La vida de una transacción
Toda transacción pasa por estos estados:
- Activa: el estado inicial, mientras se ejecutan sus operaciones.
- Parcialmente comprometida: ya se ejecutó su última instrucción, pero falta asegurar que el resultado quede guardado.
- Comprometida: terminó con éxito; sus cambios son permanentes.
- Fallida: descubrió que no puede continuar normalmente, por ejemplo por un saldo insuficiente.
- Abortada: se deshicieron sus cambios y la base de datos volvió al estado anterior al inicio.
Lleva la transacción por sus estados. Toca un evento y mira a dónde se mueve.
Cada COMMIT o ROLLBACK es una frontera
Un COMMIT o un ROLLBACK marca un punto de sincronización: el límite entre dos transacciones seguidas, el momento en que la base de datos está en un estado consistente. Al llegar a uno:
- se confirman (o se anulan) todos los cambios hechos desde el punto anterior;
- se cierran los cursores abiertos y se pierde el posicionamiento en los datos;
- se liberan todos los registros que la transacción tenía bloqueados.
Por eso conviene poner el punto de sincronización al terminar cada operación completa del negocio, como una venta o una devolución, ni antes ni después.
06 · PrediceAntes de leer la respuesta
Sin
BEGIN, cada instrucción es su propia transacción y se confirma sola (autocommit). Para agrupar la transferencia, empieza siempre con BEGIN.Tu turno: transferencias, errores y un apagón
Una base de datos con tres cuentas y dos sesiones abiertas, como dos ventanas de un cliente SQL. Escribe SQL en cada sesión o usa los botones. Arriba ves los datos: en amarillo, los cambios que aún no se confirman. Abajo, la planificación muestra el orden real de todo lo que ejecutaste.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.