T-SQL: transacciones
UN transactiones una unidad de trabajo que se realiza en una base de datos. Las transacciones son unidades o secuencias de trabajo realizadas en un orden lógico, ya sea de forma manual por un usuario o automáticamente por algún tipo de programa de base de datos.
Una transacción es la propagación de uno o más cambios en la base de datos. Por ejemplo, si está creando un registro o actualizando un registro o eliminando un registro de la tabla, entonces está realizando una transacción en la tabla. Es importante controlar las transacciones para garantizar la integridad de los datos y manejar los errores de la base de datos.
Prácticamente, agrupará muchas consultas SQL en un grupo y las ejecutará todas juntas como parte de una transacción.
Propiedades de las transacciones
Las transacciones tienen las siguientes cuatro propiedades estándar, a las que generalmente se hace referencia con el acrónimo ACID:
Atomicity- Asegura que todas las operaciones dentro de la unidad de trabajo se completen con éxito; de lo contrario, la transacción se aborta en el momento del error y las operaciones anteriores se revierten a su estado anterior.
Consistency - Garantiza que la base de datos cambie correctamente de estado tras una transacción confirmada con éxito.
Isolation - Permite que las transacciones funcionen de forma independiente y transparente entre sí.
Durability - Asegura que el resultado o efecto de una transacción comprometida persista en caso de falla del sistema.
Control de transacciones
Existen los siguientes comandos que se utilizan para controlar las transacciones:
COMMIT - Para guardar los cambios.
ROLLBACK - Revertir los cambios.
SAVEPOINT - Crea puntos dentro de grupos de transacciones en los que ROLLBACK.
SET TRANSACTION - Coloca un nombre en una transacción.
Los comandos de control transaccional solo se utilizan con los comandos DML INSERT, UPDATE y DELETE únicamente. No se pueden usar al crear tablas o descartarlas porque estas operaciones se confirman automáticamente en la base de datos.
Para usar comandos de control transaccional en MS SQL Server, tenemos que comenzar la transacción con 'begin tran' o comenzar el comando de transacción, de lo contrario estos comandos no funcionarán.
Comando COMMIT
El comando COMMIT es el comando transaccional que se utiliza para guardar los cambios invocados por una transacción en la base de datos. Este comando guarda todas las transacciones en la base de datos desde el último comando COMMIT o ROLLBACK.
Sintaxis
A continuación se muestra la sintaxis del comando COMMIT.
COMMIT;
Ejemplo
Considere que la tabla CLIENTES tiene los siguientes registros.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
El siguiente ejemplo de comando eliminará los registros de la tabla con edad = 25 y luego COMPROMETE los cambios en la base de datos.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT
Como resultado, se eliminarán dos filas de la tabla y la instrucción SELECT producirá el siguiente resultado.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
Comando ROLLBACK
El comando ROLLBACK es el comando transaccional que se utiliza para deshacer transacciones que aún no se han guardado en la base de datos. Este comando solo se puede usar para deshacer transacciones desde que se emitió el último comando COMMIT o ROLLBACK.
Sintaxis
A continuación se muestra la sintaxis del comando ROLLBACK.
ROLLBACK
Ejemplo
Considere que la tabla CLIENTES tiene los siguientes registros.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
El siguiente ejemplo de comando eliminará los registros de la tabla que tengan edad = 25 y luego ROLLBACK los cambios en la base de datos.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK
Como resultado, la operación de eliminación no afectará a la tabla y la instrucción SELECT producirá el siguiente resultado.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
Comando SAVEPOINT
SAVEPOINT es un punto en una transacción en el que puede revertir la transacción hasta cierto punto sin revertir toda la transacción.
Sintaxis
A continuación se muestra la sintaxis del comando SAVEPOINT.
SAVE TRANSACTION SAVEPOINT_NAME
Este comando sirve solo en la creación de un SAVEPOINT entre declaraciones transaccionales. El comando ROLLBACK se utiliza para deshacer un grupo de transacciones.
A continuación se muestra la sintaxis para retroceder a un SAVEPOINT.
ROLLBACK TO SAVEPOINT_NAME
En el siguiente ejemplo, eliminaremos tres registros diferentes de la tabla CLIENTES. Tendremos que crear un SAVEPOINT antes de cada eliminación, para poder ROLLBACK a cualquier SAVEPOINT en cualquier momento para devolver los datos apropiados a su estado original.
Ejemplo
Considere la tabla CLIENTES que tiene los siguientes registros:
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
A continuación se muestran la serie de operaciones:
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
Las tres eliminaciones han tenido lugar, sin embargo, hemos cambiado de opinión y decidimos ROLLBACK al SAVEPOINT que identificamos como SP2. Debido a que SP2 se creó después de la primera eliminación, las dos últimas eliminaciones se deshacen:
ROLLBACK Transaction SP2
Rollback complete.
Tenga en cuenta que solo se llevó a cabo la primera eliminación desde que volvimos a SP2.
SELECT * FROM CUSTOMERS
6 filas seleccionadas.
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
Comando SET TRANSACTION
El comando SET TRANSACTION se puede utilizar para iniciar una transacción de base de datos. Este comando se usa para especificar características para la transacción que sigue.
Sintaxis
A continuación se muestra la sintaxis de SET TRANSACTION.
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>