- HSQLDB Tutorial
- HSQLDB - Home
- HSQLDB - Introduction
- HSQLDB - Installation
- HSQLDB - Connect
- HSQLDB - Data Types
- HSQLDB - Create Table
- HSQLDB - Drop Table
- HSQLDB - Insert Query
- HSQLDB - Select Query
- HSQLDB - Where Clause
- HSQLDB - Update Query
- HSQLDB - Delete Clause
- HSQLDB - Like Clause
- HSQLDB - Sorting Results
- HSQLDB - Joins
- HSQLDB - Null Values
- HSQLDB - Regular Expressions
- HSQLDB - Transactions
- HSQLDB - Alter Command
- HSQLDB - Indexes
- HSQLDB Useful Resources
- HSQLDB - Quick Guide
- HSQLDB - Useful Resources
- HSQLDB - Discussion
HSQLDB - 事务
事务是一组连续的数据库操作操作,它作为一个工作单元执行并被视为一个工作单元。也就是说,当所有操作都成功执行后,整个事务才算完成。如果事务中的任何操作失败,则整个事务都将失败。
交易的属性
基本上,事务支持 4 个标准属性。它们可以称为 ACID 属性。
Atomics性- 事务中的所有操作都成功执行,否则事务将在失败时中止,并且先前的操作将回滚到先前的位置。
一致性- 数据库在成功提交事务后正确更改状态。
隔离性- 它使事务能够独立运行并且彼此透明。
持久性- 在系统发生故障的情况下,已提交事务的结果或效果仍然存在。
提交、回滚和保存点
这些关键字主要用于HSQLDB事务。
提交- 始终应通过执行 COMMIT 命令来完成成功的事务。
回滚- 如果事务中发生故障,则应执行 ROLLBACK 命令以将事务中引用的每个表返回到其先前的状态。
Savepoint - 在事务组中创建一个要回滚的点。
例子
以下示例解释了事务概念以及提交、回滚和保存点。让我们考虑具有 id、姓名、年龄、地址和薪水列的 Customers 表。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 卡伦 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔尼亚 | 25 | 孟买 | 6500.00 |
5 | 哈里什 | 27 | 博帕尔 | 8500.00 |
6 | 卡梅什 | 22 | 国会议员 | 1500.00 |
7 | 穆拉利 | 24 | 印多尔 | 10000.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);
提交示例
以下查询从表中删除 Age = 25 的行,并使用 COMMIT 命令在数据库中应用这些更改。
DELETE FROM CUSTOMERS WHERE AGE = 25; COMMIT;
执行上述查询后,您将收到以下输出。
2 rows effected
成功执行上述命令后,通过执行以下给出的命令来检查客户表的记录。
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 | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 卡伦 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔尼亚 | 25 | 孟买 | 6500.00 |
5 | 哈里什 | 27 | 博帕尔 | 8500.00 |
6 | 卡梅什 | 22 | 国会议员 | 1500.00 |
7 | 穆拉利 | 24 | 印多尔 | 10000.00 |
下面的示例查询解释了回滚功能,即从表中删除年龄 = 25 的记录,然后回滚数据库中的更改。
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 表作为输入。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 卡伦 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔尼亚 | 25 | 孟买 | 6500.00 |
5 | 哈里什 | 27 | 博帕尔 | 8500.00 |
6 | 卡梅什 | 22 | 国会议员 | 1500.00 |
7 | 穆拉利 | 24 | 印多尔 | 10000.00 |
让我们考虑一下在此示例中,您计划从 Customers 表中删除三个不同的记录。您希望在每次删除之前创建一个保存点,以便您可以随时回滚到任何保存点,将相应的数据返回到其原始状态。
这是一系列的操作。
SAVEPOINT SP1; DELETE FROM CUSTOMERS WHERE ID = 1; SAVEPOINT SP2; DELETE FROM CUSTOMERS WHERE ID = 2; SAVEPOINT SP3; DELETE FROM CUSTOMERS WHERE ID = 3;
现在,您已经创建了三个保存点并删除了三个记录。在这种情况下,如果要回滚 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;