HSQLDB - Transacciones

UN Transactiones un grupo secuencial de operaciones de manipulación de bases de datos, que se realiza y se considera como una sola unidad de trabajo. En otras palabras, cuando todas las operaciones se ejecuten con éxito, solo entonces se completará toda la transacción. Si falla alguna operación dentro de la transacción, toda la transacción fallará.

Propiedades de las transacciones

Básicamente, la transacción admite 4 propiedades estándar. Pueden denominarse propiedades ACID.

Atomicity - Todas las operaciones en las transacciones se ejecutan con éxito; de lo contrario, la transacción se aborta en el punto de falla y las operaciones anteriores se revierten a su posición anterior.

Consistency - La base de datos cambia de estado correctamente tras una transacción confirmada correctamente.

Isolation - Permite que la transacción opere de forma independiente y transparente entre sí.

Durability - El resultado o efecto de una transacción comprometida persiste en caso de falla del sistema.

Confirmar, deshacer y guardar punto

Estas palabras clave se utilizan principalmente para transacciones HSQLDB.

Commit- Siempre la transacción exitosa debe completarse ejecutando el comando COMMIT.

Rollback - Si ocurre una falla en la transacción, entonces se debe ejecutar el comando ROLLBACK para devolver cada tabla referenciada en la transacción a su estado anterior.

Savepoint - Crea un punto dentro del grupo de transacciones en el que retroceder.

Ejemplo

El siguiente ejemplo explica el concepto de transacciones junto con la confirmación, la restauración y el punto de guardado. Consideremos la tabla Clientes con las columnas id, nombre, edad, dirección y salario.

Carné de identidad Nombre Años Habla a Salario
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10000,00

Utilice los siguientes comandos para crear la tabla de clientes según las líneas de los datos anteriores.

CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);

Ejemplo de COMMIT

La siguiente consulta elimina filas de la tabla que tienen edad = 25 y usa el comando COMMIT para aplicar esos cambios en la base de datos.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

Después de la ejecución de la consulta anterior, recibirá el siguiente resultado.

2 rows effected

Después de la ejecución exitosa del comando anterior, verifique los registros de la tabla de clientes ejecutando el comando dado a continuación.

Select * from Customer;

Después de la ejecución de la consulta anterior, recibirá el siguiente resultado.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  |  32 | Ahmedabad |   2000   |
| 3  |  kaushik |  23 |   Kota    |   2000   |
| 5  |  Harish  |  27 |   Bhopal  |   8500   |
| 6  |  Kamesh  |  22 |    MP     |   4500   |
| 7  |  Murali  |  24 |   Indore  |   10000  |
+----+----------+-----+-----------+----------+

Ejemplo de reversión

Consideremos la misma tabla de clientes como entrada.

Carné de identidad Nombre Años Habla a Salario
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10000,00

Aquí está la consulta de ejemplo que explica la funcionalidad de Retroceso al eliminar registros de la tabla con edad = 25 y luego ROLLBACK los cambios en la base de datos.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

Después de la ejecución exitosa de las dos consultas anteriores, puede ver los datos del registro en la tabla Cliente usando el siguiente comando.

Select * from Customer;

Después de la ejecución del comando anterior, recibirá el siguiente resultado.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad |   2000   |
|  2 |  Karun   |  25 |   Delhi   |   1500   |
|  3 |  Kaushik |  23 |   Kota    |   2000   |
|  4 | Chaitanya|  25 |   Mumbai  |   6500   |
|  5 |  Harish  |  27 |   Bhopal  |   8500   |
|  6 |  Kamesh  |  22 |     MP    |   4500   |
|  7 |  Murali  |  24 |    Indore |   10000  |
+----+----------+-----+-----------+----------+

La consulta de eliminación elimina los datos de registro de los clientes cuya edad = 25. El comando Revertir, revierte esos cambios en la tabla Cliente.

Ejemplo de 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.

Consideremos la misma tabla de clientes como entrada.

Carné de identidad Nombre Años Habla a Salario
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10000,00

Consideremos en este ejemplo que planea eliminar los tres registros diferentes de la tabla Clientes. Desea crear un punto de guardado antes de cada eliminación, de modo que pueda volver a cualquier punto de guardado en cualquier momento para devolver los datos apropiados a su estado original.

Aquí está la serie de operaciones.

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

Ahora, ha creado tres Savepoint y ha eliminado tres registros. En esta situación, si desea revertir los registros que tienen Id 2 y 3, utilice el siguiente comando Revertir.

ROLLBACK TO SP2;

Tenga en cuenta que solo se llevó a cabo la primera eliminación desde que se revertió al SP2. Utilice la siguiente consulta para mostrar todos los registros de los clientes.

Select * from Customer;

Después de la ejecución de la consulta anterior, recibirá el siguiente resultado.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  2 |   Karun  |  25 |  Delhi    |   1500   |
|  3 |  Kaushik |  23 |  Kota     |   2000   |
|  4 | Chaitanya|  25 |  Mumbai   |   6500   |
|  5 |  Harish  |  27 |  Bhopal   |   8500   |
|  6 |  Kamesh  |  22 |  MP       |   4500   |
|  7 |  Murali  |  24 |  Indore   |  10000   |
+----+----------+-----+-----------+----------+

Liberar Savepoint

Podemos liberar el punto de guardado usando el comando RELEASE. A continuación se muestra la sintaxis genérica.

RELEASE SAVEPOINT SAVEPOINT_NAME;