HSQLDB - 交易

事务是一组连续的数据库操作操作,它被执行并被视为一个单独的工作单元.换句话说,当所有操作都成功执行时,只有整个事务才会完成.如果交易中的任何操作失败,则整个交易将失败.

交易属性

基本上,交易支持4种标准属性.它们可以称为ACID属性.

Atomicity : 事务中的所有操作都成功执行,否则事务在失败时中止,之前的操作将回滚到先前的位置.

一致性 : 数据库在成功提交事务时正确更改状态.

隔离 : 它使交易能够独立运作并相互透明.

耐久性 : 如果系统出现故障,提交的事务的结果或效果仍然存在.

提交,回滚和保存点

这些关键字主要用于HSQLDB交易.

提交 : 始终应该通过执行COMMIT命令来完成成功的事务.

回滚 : 如果事务中发生故障,则应执行ROLLBACK命令以将事务中引用的每个表返回到其先前的状态.

Savepoint : 在要回滚的事务组中创建一个点.

示例

以下示例说明了事务概念以及提交,回滚和保存点.让我们考虑具有列id,名称,年龄,地址和薪水的客户表.

Id名称年龄地址Salary
1Ramesh32Ahmedabad2000.00
2Karun25德里1500.00
3Kaushik23Kota2000.00
4Chaitanya25Mumbai6500.00
5Harish27Bhopal8500.00
6Kamesh22MP1500.00
7Murali24Indore10000.00

使用以下命令按照上述数据的行创建客户表.

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

COMMIT的示例

以下查询从age = 25的表中删除行并使用COMMIT命令在数据库中应用这些更改.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

执行上述查询后,您将收到以下输出.

2 rows effected

成功执行上述命令后,执行以下给定的命令检查customer表的记录.

Select * from Customer;

执行上述查询后,您将收到以下输出.

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

回滚示例

让我们将同一个Customer表视为输入.

Id名称年龄地址薪水
1Ramesh32Ahmedabad2000.00
2Karun25Delhi1500.00
3Kaushik23Kota2000.00
4Chaitanya25Mumbai6500.00
5Harish27Bhopal8500.00
6Kamesh22MP1500.00
7Murali24Indore10000.00

下面是一个示例查询,通过从age = 25的表中删除记录然后ROLLBACK数据库中的更改来解释回滚功能.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

成功执行上述两个查询后,您可以使用以下命令查看Customer表中的记录数据.

Select * from Customer;

执行上述命令后,您将收到以下输出.

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

删除查询会删除年龄为25岁的客户的记录数据.回滚命令会在Customer表上回滚这些更改.

Savepoint的示例

当您可以将事务回滚到某个点而不回滚整个事务时,Savepoint是事务中的一个点.

让我们将同一个Customer表视为输入.

Id名称年龄地址薪水
1Ramesh32Ahmedabad2000.00
2Karun25Delhi150 0.00
3Kaushik23Kota2000.00
4Chaitanya25Mumbai6500.00
5Harish27Bhopal8500.00
6Kamesh22MP1500.00
7Murali24Indore10000.00

让我们考虑在这个例子中,您计划从Customers表中删除三个不同的记录.您希望在每次删除之前创建一个Savepoint,以便您可以随时回滚到任何Savepoint以将相应的数据返回到其原始状态.

以下是一系列操作.

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

现在,您已经创建了三个Savepoint并删除了三个记录.在这种情况下,如果要回滚具有Id 2和3的记录,请使用以下Rollback命令.

ROLLBACK TO SP2;

请注意,自回滚到SP2以来,只发生了第一次删除.使用以下查询显示客户的所有记录.

Select * from Customer;

执行上述查询后,您将收到以下输出.

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

释放保存点

我们可以使用RELEASE命令释放Savepoint.以下是通用语法.

RELEASE SAVEPOINT SAVEPOINT_NAME;