Utilizar un punto de guardado (savepoint) para un deshacer parcial
En este paso, aprenderás cómo utilizar puntos de guardado (savepoints) dentro de una transacción para permitir deshacer parcialmente los cambios. Los puntos de guardado son marcadores dentro de una transacción a los que se puede revertir, lo que permite deshacer solo algunos de los cambios realizados durante la transacción, en lugar de toda la transacción.
Continuando desde el paso anterior, deberías seguir conectado al servidor MySQL. Si no es así, vuelve a conectarte utilizando el siguiente comando:
mysql -u root -p
Ingresa la contraseña si se te solicita y luego selecciona la base de datos labex_db
:
USE labex_db;
Ahora, iniciemos una nueva transacción:
BEGIN;
Primero, creemos un punto de guardado llamado savepoint1
:
SAVEPOINT savepoint1;
Este comando crea un punto de guardado llamado savepoint1
. Cualquier cambio realizado después de este punto de guardado se puede deshacer hasta este punto.
Ahora, actualicemos el saldo de 'ACC001':
UPDATE accounts SET balance = balance - 200 WHERE account_number = 'ACC001';
A continuación, creemos otro punto de guardado llamado savepoint2
:
SAVEPOINT savepoint2;
Ahora, insertemos un nuevo registro en la tabla accounts
:
INSERT INTO accounts (account_number, balance) VALUES ('ACC004', 300.00);
Supongamos que ahora decides que quieres deshacer la inserción de 'ACC004', pero quieres mantener la actualización de 'ACC001'. Puedes deshacer hasta savepoint2
:
ROLLBACK TO savepoint2;
Este comando deshace la transacción al estado en el que se encontraba cuando se creó savepoint2
, lo que efectivamente deshace la inserción de 'ACC004'.
Para verificar que el deshacer hasta savepoint2
se realizó correctamente, comprueba si 'ACC004' existe:
SELECT * FROM accounts WHERE account_number = 'ACC004';
Esta consulta no debería devolver ninguna fila, lo que indica que 'ACC004' ha sido eliminado.
Ahora, comprobemos el saldo de 'ACC001':
SELECT * FROM accounts WHERE account_number = 'ACC001';
El saldo de 'ACC001' debería estar actualizado (disminuido en 200).
Si estás satisfecho con los cambios restantes (la actualización de 'ACC001'), ahora puedes confirmar la transacción:
COMMIT;
Este comando confirma la transacción, haciendo permanente la actualización de 'ACC001'.
En resumen, este paso demostró cómo utilizar puntos de guardado dentro de una transacción para permitir deshacer parcialmente los cambios. Esto proporciona un control más detallado sobre la gestión de transacciones, lo que te permite deshacer cambios específicos mientras se mantienen otros.