Los 50 euros que desaparecen
Marta le manda 50 euros a Iker con una aplicación del móvil. Para el banco son dos pasos: quitar 50 a Marta y sumar 50 a Iker.
Imagina que la luz se va justo entre los dos pasos. Marta ya ha pagado, pero Iker no ha cobrado.
¿Dónde están los 50 euros? En ningún sitio. Una transacción evita que pase esto.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Transacción | Un grupo de órdenes que se hacen todas o no se hace ninguna. | Quitar 50 y sumar 50 |
| BEGIN | Abre la transacción: empieza el grupo. | BEGIN; |
| COMMIT | Confirma la transacción: todos los cambios quedan guardados. | COMMIT; |
| ROLLBACK | Deshace la transacción: todo vuelve a como estaba. | ROLLBACK; |
| Todo o nada | La regla de una transacción: o salen todos los pasos, o ninguno. | La transferencia entera |
| Copia de seguridad | Una copia de la base de datos guardada por si se pierde la original. | Un archivo de ayer |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: la transferencia sin protección
-- Primer paso: quitar 50 a Marta.
UPDATE accounts SET balance = balance - 50 WHERE owner = 'Marta';
-- Aquí se va la luz: el segundo paso no llega a ejecutarse.
-- Antes había 120 euros en total. ¿Cuántos hay ahora?
SELECT SUM(balance) AS total FROM accounts;
Ejemplo resuelto: la transferencia paso a paso
| Momento | Marta | Iker | Total |
|---|---|---|---|
| Al empezar | 100 | 20 | 120 |
| Después de quitar 50 a Marta | 50 | 20 | 70 |
| Después de sumar 50 a Iker | 50 | 70 | 120 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Todo o nada
Una transacción junta varias órdenes en un solo paquete. Empieza con BEGIN.
Si todo va bien, escribes COMMIT y los cambios se guardan a la vez. Si algo falla, escribes ROLLBACK y todo vuelve a como estaba antes del BEGIN.
Pruébalo: la transferencia con COMMIT
BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE owner = 'Marta';
UPDATE accounts SET balance = balance + 50 WHERE owner = 'Iker';
COMMIT;
-- Marta tiene 50 e Iker 70: el total sigue siendo 120.
SELECT * FROM accounts;
Pruébalo: la transferencia con ROLLBACK
BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE owner = 'Marta';
-- Algo falla aquí, así que deshacemos todo.
ROLLBACK;
-- Marta vuelve a tener 100 e Iker 20.
SELECT * FROM accounts;
Repaso rápido: ordena la transferencia
Inténtalo
Repaso rápido: ordena la transferencia
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.