Las transacciones en SQL son un conjunto de instrucciones SQL que se ejecutan como una sola unidad. Esto significa que, si todas las instrucciones en la transacción se ejecutan correctamente, se considera que la transacción ha tenido éxito y todos los cambios realizados por las instrucciones se guardan en la base de datos.
Si ocurre un error durante la ejecución de una instrucción en la transacción, se deshacen todos los cambios realizados por las instrucciones anteriores en la transacción y se considera que ha fallado.
Para gestionar transacciones en SQL, puede utilizar las siguientes instrucciones,
- BEGIN TRANSACTION. Inicia una transacción.
- COMMIT. Confirma todos los cambios realizados en la transacción y los guarda en la base de datos.
- ROLLBACK. Deshace todos los cambios realizados en la transacción y los restaura a su estado anterior.
Aquí hay un ejemplo de cómo gestionar una transacción en SQL,
BEGIN TRANSACTION;
UPDATE table1 SET column1 = 'value1' WHERE condition1;
UPDATE table2 SET column2 = 'value2' WHERE condition2;
COMMIT;
END;
En este ejemplo, se inicia una transacción con la instrucción BEGIN TRANSACTION. Luego se ejecutan dos instrucciones UPDATE para modificar dos tablas. Si ambas instrucciones se ejecutan correctamente, se confirma la transacción con la instrucción COMMIT y se guardan los cambios en la base de datos.
Si ocurre un error durante la ejecución de una de las instrucciones UPDATE, se deshacen todos los cambios realizados en la transacción y se restauran a su estado anterior con la instrucción ROLLBACK.
Además de las instrucciones anteriormente comentadas, tenemos estas otras,
- SAVEPOINT. Crea un punto de salvaguardia en la transacción, que le permite deshacer cambios específicos dentro de la transacción en lugar de deshacer todos los cambios realizados en la transacción.
- ROLLBACK TO SAVEPOINT. Deshace todos los cambios realizados después del punto de salvaguardia especificado y restaura la transacción al punto de salvaguardia.
- SET TRANSACTION. Establece el nivel de aislamiento de la transacción y, opcionalmente, la duración de la transacción.
Aquí hay un ejemplo de cómo utilizar un punto de salvaguardia y la instrucción ROLLBACK TO SAVEPOINT en una transacción,
BEGIN TRANSACTION;
SAVEPOINT savepoint1;
UPDATE table1 SET column1 = 'value1' WHERE condition1;
SAVEPOINT savepoint2;
UPDATE table2 SET column2 = 'value2' WHERE condition2;
ROLLBACK TO SAVEPOINT
savepoint1;
COMMIT;
END;
En este ejemplo, se inicia una transacción con la instrucción BEGIN TRANSACTION. Luego se crea un punto de salvaguardia con la instrucción SAVEPOINT. Se ejecuta una instrucción UPDATE para modificar una tabla y se crea otro punto de salvaguardia. Luego se ejecuta otra instrucción UPDATE para modificar otra tabla.
Si ocurre un error durante la ejecución de esta última instrucción UPDATE, se deshace todo lo que se ha realizado después del primer punto de salvaguardia con la instrucción ROLLBACK TO SAVEPOINT, lo que significa que solo se deshace la segunda instrucción UPDATE. La transacción se confirma con la instrucción COMMIT y se guardan los cambios en la base de datos.