SQL - Transacciones

Una transacción es 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 esa tabla. Es importante controlar estas 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 punto de falla y todas las operaciones anteriores se revierten a su estado anterior.

  • Consistency - asegura que la base de datos cambia 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

Los siguientes comandos se utilizan para controlar transacciones.

  • COMMIT - para guardar los cambios.

  • ROLLBACK - para revertir los cambios.

  • SAVEPOINT - crea puntos dentro de los grupos de transacciones en los que ROLLBACK.

  • SET TRANSACTION - Coloca un nombre en una transacción.

Comandos de control transaccional

Los comandos de control transaccional solo se utilizan con el DML Commandscomo - INSERTAR, ACTUALIZAR y ELIMINAR solamente. No se pueden usar al crear tablas o descartarlas porque estas operaciones se confirman automáticamente en la base de datos.

El 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.

El comando COMMIT es el comando transaccional que se utiliza para guardar los cambios invocados por una transacción en la base de datos. El comando COMMIT guarda todas las transacciones en la base de datos desde el último comando COMMIT o ROLLBACK.

La sintaxis del comando COMMIT es la siguiente.

COMMIT;

Example

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 muestra un ejemplo que eliminaría los registros de la tabla que tienen edad = 25 y luego COMPROMETE los cambios en la base de datos.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Por lo tanto, se eliminarían dos filas de la tabla y la instrucción SELECT produciría 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 |
+----+----------+-----+-----------+----------+

El 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.

La sintaxis de un comando ROLLBACK es la siguiente:

ROLLBACK;

Example

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 muestra un ejemplo, que eliminaría los registros de la tabla que tienen la edad = 25 y luego ROLLBACK los cambios en la base de datos.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Por lo tanto, la operación de eliminación no afectaría a la tabla y la instrucción SELECT produciría 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 |
+----+----------+-----+-----------+----------+

El comando SAVEPOINT

Un 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.

La sintaxis de un comando SAVEPOINT es la que se muestra a continuación.

SAVEPOINT SAVEPOINT_NAME;

Este comando sirve solo en la creación de un SAVEPOINT entre todas las declaraciones transaccionales. El comando ROLLBACK se utiliza para deshacer un grupo de transacciones.

La sintaxis para revertir a SAVEPOINT es la que se muestra a continuación.

ROLLBACK TO SAVEPOINT_NAME;

A continuación, se muestra un ejemplo en el que planea eliminar los tres registros diferentes de la tabla CUSTOMERS. Desea crear un SAVEPOINT antes de cada eliminación, de modo que pueda ROLLBACK a cualquier SAVEPOINT en cualquier momento para devolver los datos apropiados a su estado original.

Example

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 bloque de código contiene la serie de operaciones.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Ahora que se han realizado las tres eliminaciones, supongamos que cambió de opinión y decidió ROLLBACK al SAVEPOINT que identificó como SP2. Debido a que SP2 se creó después de la primera eliminación, las dos últimas eliminaciones se deshacen:

SQL> ROLLBACK TO SP2;
Rollback complete.

Observe que solo se llevó a cabo la primera eliminación desde que revertió al SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
6 rows selected.

El comando RELEASE SAVEPOINT

El comando RELEASE SAVEPOINT se utiliza para eliminar un SAVEPOINT que ha creado.

La sintaxis de un comando RELEASE SAVEPOINT es la siguiente.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Una vez que se ha liberado un SAVEPOINT, ya no puede usar el comando ROLLBACK para deshacer transacciones realizadas desde el último SAVEPOINT.

El 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. Por ejemplo, puede especificar que una transacción sea de solo lectura o de lectura y escritura.

La sintaxis de un comando SET TRANSACTION es la siguiente.

SET TRANSACTION [ READ WRITE | READ ONLY ];