HSQLDB - Transações

UMA Transactioné um grupo sequencial de operações de manipulação de banco de dados, que é executado e considerado como uma única unidade de trabalho. Em outras palavras, quando todas as operações forem executadas com sucesso, somente então toda a transação será concluída. Se alguma operação dentro da transação falhar, a transação inteira falhará.

Propriedades das transações

Basicamente, a transação oferece suporte a 4 propriedades padrão. Eles podem ser referidos como propriedades ACID.

Atomicity - Todas as operações nas transações são executadas com sucesso, caso contrário, a transação é abortada no ponto de falha e as operações anteriores são revertidas para sua posição anterior.

Consistency - O banco de dados muda de estado corretamente após uma transação confirmada com sucesso.

Isolation - Permite que a transação opere de forma independente e transparente entre si.

Durability - O resultado ou efeito de uma transação confirmada persiste em caso de falha do sistema.

Commit, Rollback e Savepoint

Essas palavras-chave são usadas principalmente para transações HSQLDB.

Commit- Sempre a transação bem-sucedida deve ser concluída executando o comando COMMIT.

Rollback - Se ocorrer uma falha na transação, o comando ROLLBACK deve ser executado para retornar todas as tabelas referenciadas na transação ao seu estado anterior.

Savepoint - Cria um ponto dentro do grupo de transações no qual reverter.

Exemplo

O exemplo a seguir explica o conceito de transações junto com commit, rollback e Savepoint. Vamos considerar a tabela Clientes com as colunas id, nome, idade, endereço e salário.

Eu iria Nome Era Endereço Salário
1 Ramesh 32 Ahmedabad 2.000,00
2 Karun 25 Délhi 1500,00
3 Kaushik 23 Kota 2.000,00
4 Chaitanya 25 Mumbai 6.500,00
5 Harish 27 Bhopal 8.500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Use os seguintes comandos para criar a tabela de clientes ao longo das linhas dos dados acima.

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);

Exemplo para COMMIT

A consulta a seguir exclui linhas da tabela com idade = 25 e usa o comando COMMIT para aplicar essas alterações no banco de dados.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

Após a execução da consulta acima, você receberá a seguinte saída.

2 rows effected

Após a execução bem-sucedida do comando acima, verifique os registros da tabela do cliente executando o comando fornecido abaixo.

Select * from Customer;

Após a execução da consulta acima, você receberá a seguinte saída.

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

Exemplo para reversão

Vamos considerar a mesma tabela de clientes como entrada.

Eu iria Nome Era Endereço Salário
1 Ramesh 32 Ahmedabad 2.000,00
2 Karun 25 Délhi 1500,00
3 Kaushik 23 Kota 2.000,00
4 Chaitanya 25 Mumbai 6.500,00
5 Harish 27 Bhopal 8.500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Aqui está o exemplo de consulta que explica sobre a funcionalidade de Rollback, excluindo registros da tabela com idade = 25 e, em seguida, ROLLBACK as alterações no banco de dados.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

Após a execução bem-sucedida das duas consultas acima, você pode visualizar os dados do registro na tabela do Cliente usando o seguinte comando.

Select * from Customer;

Após a execução do comando acima, você receberá a seguinte saída.

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

A consulta de exclusão exclui os dados de registro de clientes com idade = 25. O comando Rollback, reverte essas alterações na tabela Customer.

Exemplo para Savepoint

O ponto de salvamento é um ponto em uma transação em que você pode reverter a transação para um determinado ponto sem reverter toda a transação.

Vamos considerar a mesma tabela de clientes como entrada.

Eu iria Nome Era Endereço Salário
1 Ramesh 32 Ahmedabad 2.000,00
2 Karun 25 Délhi 1500,00
3 Kaushik 23 Kota 2.000,00
4 Chaitanya 25 Mumbai 6.500,00
5 Harish 27 Bhopal 8.500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Vamos considerar neste exemplo, você planeja excluir os três registros diferentes da tabela Clientes. Você deseja criar um Savepoint antes de cada exclusão, de modo que possa reverter para qualquer Savepoint a qualquer momento para retornar os dados apropriados ao seu estado original.

Aqui está a série de operações.

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

Agora, você criou três pontos de salvamento e excluiu três registros. Nesta situação, se você deseja reverter os registros com Id 2 e 3, use o seguinte comando Rollback.

ROLLBACK TO SP2;

Observe que apenas a primeira exclusão ocorreu desde a reversão para o SP2. Use a seguinte consulta para exibir todos os registros dos clientes.

Select * from Customer;

Após a execução da consulta acima, você receberá a seguinte saída.

+----+----------+-----+-----------+----------+
| 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 ponto de salvamento

Podemos liberar o Savepoint usando o comando RELEASE. A seguir está a sintaxe genérica.

RELEASE SAVEPOINT SAVEPOINT_NAME;