HSQLDB - 事務



一個事務是一系列資料庫操作的順序集合,它被執行並被視為一個單一的工作單元。換句話說,只有當所有操作都成功執行後,整個事務才算完成。如果事務中的任何操作失敗,則整個事務都將失敗。

事務的特性

基本上,事務支援4個標準特性。它們可以被稱為ACID特性。

原子性 - 事務中的所有操作都成功執行,否則事務在失敗點中止,之前的操作回滾到它們之前的狀態。

一致性 - 資料庫在成功提交的事務後正確地改變狀態。

隔離性 - 它使事務能夠獨立地、透明地彼此執行。

永續性 - 提交的事務的結果或影響在系統故障的情況下仍然存在。

提交、回滾和儲存點

這些關鍵字主要用於HSQLDB事務。

提交 - 成功的事務應該總是透過執行COMMIT命令來完成。

回滾 - 如果事務發生故障,則應執行ROLLBACK命令將事務中引用的每個表返回到其先前狀態。

儲存點 - 在事務組中建立一個回滾點。

示例

下面的例子解釋了事務的概念以及提交、回滾和儲存點。讓我們考慮一個名為Customers的表,其列包括id、name、age、address和salary。

ID 姓名 年齡 地址 薪水
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

使用以下命令建立與上述資料類似的customer表。

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示例

以下查詢刪除表中年齡為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 姓名 年齡 地址 薪水
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

這是一個示例查詢,它透過刪除表中年齡為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表的這些更改。

儲存點示例

儲存點是事務中的一個點,您可以將事務回滾到某個點,而無需回滾整個事務。

讓我們考慮相同的Customer表作為輸入。

ID 姓名 年齡 地址 薪水
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

讓我們在這個例子中考慮一下,您計劃從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 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命令釋放儲存點。以下是通用語法。

RELEASE SAVEPOINT SAVEPOINT_NAME;
廣告
© . All rights reserved.