- HSQLDB 教程
- HSQLDB - 首頁
- HSQLDB - 簡介
- HSQLDB - 安裝
- HSQLDB - 連線
- HSQLDB - 資料型別
- HSQLDB - 建立表
- HSQLDB - 刪除表
- HSQLDB - 插入查詢
- HSQLDB - 選擇查詢
- HSQLDB - WHERE 子句
- HSQLDB - 更新查詢
- HSQLDB - DELETE 子句
- HSQLDB - LIKE 子句
- HSQLDB - 排序結果
- HSQLDB - 連線查詢
- HSQLDB - 空值
- HSQLDB - 正則表示式
- HSQLDB - 事務
- HSQLDB - ALTER 命令
- HSQLDB - 索引
- HSQLDB 有用資源
- HSQLDB - 快速指南
- HSQLDB - 有用資源
- HSQLDB - 討論
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;