Las transacciones SQL se utilizan para mantener la fiabilidad de los datos al garantizar que una secuencia de instrucciones SQL server se ejecute de forma correcta.
A través de las transacciones SQL se gestionan secuencias de sentencias SQL que deben ejecutarse como una única unidad de trabajo, de modo que la base de datos nunca contenga los resultados de operaciones parciales.
Cuando una transacción SQL realiza varios cambios; estos se realizan correctamente cuando se confirma la transacción de lo contrario estos cambios se deshacen cuando ocurre algún error en la transacción.
¿Cuándo usar transacciones SQL?
Las transacciones SQL son primordiales en situaciones en las que la coherencia de los datos estaría en riesgo en caso de que fallara cualquiera de una secuencia de instrucciones SQL.
Por ejemplo, si estuviera moviendo dinero de una cuenta bancaria a otra, necesitaría deducir dinero de una cuenta y agregarlo a la otra. No querrá que falle a la mitad, de lo contrario, el dinero podría debitarse de una cuenta, pero no acreditarse en la otra. Las posibles razones de la falla podrían incluir fondos insuficientes, número de cuenta no válido, falla de hardware, etc.
Control de transacciones
Los siguientes comandos se utilizan para controlar las transacciones.
- COMMIT − archiva los cambios en la transacción.
- ROLLBACK: para revertir los cambios.
- SAVEPOINT: puede hacer puntos dentro de una transacción SQL, los cuales puede deshacer con ROLLBACK.
- SET TRANSACTION: puede nombrar una transacción.
El control de transacciones en SQL Server, es importante en entornos donde múltiples usuarios o aplicaciones acceden a la base de datos de forma concurrente. Garantiza que las operaciones se realicen correctamente, manteniendo la consistencia y evitando problemas de concurrencia y bloqueo.
Las transacciones se manejan de manera automática, pero es esencial que los desarrolladores y administradores de bases de datos comprendan cómo funcionan y cómo implementar correctamente el control de transacciones en sus aplicaciones para mantener la integridad de los datos y evitar problemas potenciales.
Sintaxis de transacciones SQL
BEGIN TRY BEGIN TRANSACTION --Insertaremos el código de la transacción END TRY BEGIN CATCH --recoger y mostrar los errores ROLLBACK TRANSACTION; END CATCH IF @@TRANCOUNT > 0 COMMIT TRANSACTION END
Lista de cosas para recordar mientras se trabaja en las transacciones SQL.
- Cada transacción SQL debe comenzar con la palabra clave SQL BEGIN TRANSACTION, BEGIN TRAN o BEGIN TRANSACTION.
- Cada transacción en SQL Server debe terminar con instrucciones COMMIT o ROLLBACK.
- COMMIT TRANSACTION: esta declaración le dice al SQL que guarde los cambios realizados entre BEGIN y COMMIT. Hay varias formas de escribir esta declaración. Puede escribir COMMIT, COMMIT TRAN, COMMIT TRANSACTION o COMMIT TRANSACTION.
- ROLLBACK TRANSACTION: esta declaración le dice al SQL que borre todos los cambios realizados entre BEGIN y ROLLBACK. Hay varias formas de escribir esta declaración. Puede escribir ROLLBACK, ROLLBACK TRAN, ROLLBACK TRANSACTION o ROLLBACK TRANSACTION.
Permítame mostrarle varios ejemplos que pueden explicar la Transacciones SQL. Son BEGIN TRANSACTION, COMMIT, ROLLBACK, Trans dentro de IF ELSE y SQL Server Transacciones dentro del bloque TRY CATCH.
Ejemplo de transacción SQL
En este ejemplo de SQL Server, colocaremos una instrucción INSERT INTO dentro de la transacción BEGIN y COMMIT.
BEGIN TRANSACTION; --Comienza BEGIN TRY --Aquí empieza el try Insert into CLIENTE(codigo,Nombre,apellido,) values(01,'Manuel','Fernández'); --si estamos aquí todo va bien COMMIT; END TRY BEGIN CATCH -- si estamos aquí hay problema en la transacción SELECT ERROR_NUMBER() AS Número_Error ,ERROR_SEVERITY() AS Error_Severidad ,ERROR_STATE() AS Error_Estado ,ERROR_PROCEDURE() AS ErrorProcedimiento ,ERROR_LINE() AS Error_Linea ,ERROR_MESSAGE() AS Mensaje_Error; ROLLBACK TRANSACTION; END CATCH;
En este ejemplo, hemos iniciado la transacción con BEGIN TRANSACTION, luego hemos realizado una operación de inserción para agregar la información del cliente en la tabla Finalmente, confirmamos los cambios con COMMIT, lo que hará que la operación sea permanente.
si la transacción tiene un error en el bloque TRY, el control se transferirá al bloque CATCH, donde podemos manejar el error. En este caso, simplemente deshacemos los cambios con ROLLBACK y mostramos un mensaje de error con detalles específicos utilizando la funciones de mensaje de error
Comandos de transacción de SQL:
commit:
Confirmar se utiliza para guardar consultas SQL; commit solo funciona con comandos DML. Recuerde que después de ejecutar el comando de confirmación, los 3 tipos de consultas se guardarán y no se pueden deshacer.
- Actualización de una fila o columna de una tabla.
- Elimina una entrada de la tabla.
- Inserte nuevos registros en la tabla.
Aquí hay un ejemplo de transacciones SQL simple:
BEGIN TRANSACCION DELETE Orden WHERE OrdenId = 5006; COMMIT TRANSACCION;
En este caso, la información del pedido se elimina de dos tablas. Ambas sentencias se tratan como una unidad de trabajo.
Podríamos escribir lógica condicional en nuestras transacciones SQL para hacerla retroceder en caso de error.
Rollback:
La reversión es una función que se utiliza en los sistemas de gestión de bases de datos para algún tipo de seguridad a través de transacciones SQL. Podemos usar el comando ROLLBACK para borrar todas las modificaciones de datos realizadas desde el inicio de la transacción o hasta un punto de guardado. También libera los recursos retenidos por la transacción. En palabras simples, si cometimos algunos errores en los datos al ejecutar los comandos DML, podemos revertir o deshacer los cambios para que los datos tengan su forma original.
Nota: Después de confirmar algo, no podemos revertir.
Aquí está el ejemplo anterior de nuevo, pero con algo de código extra. El código adicional se utiliza para deshacer la transacción en caso de error.:
BEGIN TRANSACCION BEGIN TRY DELETE Orden WHERE OrdenId = 5006; COMMIT TRANSACCION END TRY BEGIN CATCH ROLLBACK TRANSACCION END CATCH
La declaración TRY-CATCH implementa el manejo de errores en SQL Server. Puede encerrar cualquier grupo de declaraciones en transacciones SQL en un TRY
bloque. Luego, si ocurre un error en el TRY
bloque, el control se pasa a otro grupo de sentencias que está encerrado en un CATCH
bloque.
En este caso, usamos el CATCH
bloque para revertir la transacción. Dado que está en el CATCH
bloque, la reversión solo ocurre si hay un error.
SAVEPOINT:
Es un punto de guardado en las transacciones SQL define una ubicación a la que una transacción puede regresar si parte de la transacción se cancela condicionalmente. En SQL Server, especificamos un punto de guardado con (donde savepoint_name es el nombre que le damos al punto de guardado).SAVE TRANSACTION savepoint_name
Por ejemplo, si ocurre algún desastre después de ese punto, o cualquier comando de reversión ejecutado no elimina los datos antes del punto de guardado de la transacción SQL.
BEGIN TRANSACTION
INSERT INTO Producto VALUES (003, ‘Pc dell‘, 2000, 10)
SAVE TRANSACTION Insert
DELETE FROM Producto WHERE Product_id = 0002
SELECT * FROM Producto
ROLLBACK TRANSACTION Insert
COMMIT TRANSACTION
SELECT * FROM Producto;
Conclusión
Las transacciones SQL se gestionan mediante comandos de transacción, que incluyen COMMIT, que finaliza una transacción, y ROLLBACK, que deshace todas las operaciones realizadas en una transacción.
Es importante entender estos puntos al trabajar con transacciones en SQL Server para garantizar la fiabilidad de los datos y evitar problemas como la corrupción de datos o inconsistencias.
Buen articulo gracias.