HSQLDB - Giao dịch
A Transactionlà một nhóm tuần tự các thao tác thao tác cơ sở dữ liệu, được thực hiện và được coi như một đơn vị công việc duy nhất. Nói cách khác, khi tất cả các hoạt động được thực hiện thành công, chỉ khi đó toàn bộ giao dịch mới hoàn tất. Nếu bất kỳ thao tác nào trong giao dịch không thành công, thì toàn bộ giao dịch sẽ thất bại.
Thuộc tính của giao dịch
Về cơ bản, giao dịch hỗ trợ 4 thuộc tính tiêu chuẩn. Chúng có thể được gọi là thuộc tính ACID.
Atomicity - Tất cả các hoạt động trong giao dịch được thực hiện thành công, nếu không giao dịch bị hủy bỏ tại điểm không thành công và các hoạt động trước đó sẽ được quay trở lại vị trí cũ của chúng.
Consistency - Cơ sở dữ liệu thay đổi đúng các trạng thái khi giao dịch được cam kết thành công.
Isolation - Nó cho phép giao dịch hoạt động độc lập và minh bạch với nhau.
Durability - Kết quả hoặc hiệu lực của một giao dịch đã cam kết vẫn tồn tại trong trường hợp hệ thống bị lỗi.
Cam kết, Khôi phục và Lưu điểm
Các từ khóa này chủ yếu được sử dụng cho các giao dịch HSQLDB.
Commit- Luôn luôn hoàn tất giao dịch thành công bằng cách thực hiện lệnh COMMIT.
Rollback - Nếu lỗi xảy ra trong giao dịch, thì lệnh ROLLBACK sẽ được thực hiện để đưa mọi bảng được tham chiếu trong giao dịch về trạng thái trước đó của nó.
Savepoint - Tạo một điểm trong nhóm các giao dịch để khôi phục.
Thí dụ
Ví dụ sau giải thích khái niệm giao dịch cùng với cam kết, khôi phục và Savepoint. Chúng ta hãy xem xét bảng Khách hàng với các cột id, tên, tuổi, địa chỉ và mức lương.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
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 |
Sử dụng các lệnh sau để tạo bảng khách hàng dọc theo các dòng của dữ liệu trên.
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);
Ví dụ cho COMMIT
Truy vấn sau đây xóa các hàng khỏi bảng có age = 25 và sử dụng lệnh COMMIT để áp dụng những thay đổi đó trong cơ sở dữ liệu.
DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
2 rows effected
Sau khi thực hiện thành công lệnh trên, hãy kiểm tra các bản ghi của bảng khách hàng bằng cách thực hiện lệnh dưới đây.
Select * from Customer;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Ví dụ cho Rollback
Chúng ta hãy coi cùng một bảng Khách hàng là đầu vào.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
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 |
Đây là câu truy vấn ví dụ giải thích về chức năng Rollback bằng cách xóa các bản ghi khỏi bảng có age = 25 và sau đó QUAY LẠI các thay đổi trong cơ sở dữ liệu.
DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;
Sau khi thực hiện thành công hai truy vấn trên, bạn có thể xem dữ liệu bản ghi trong bảng Khách hàng bằng lệnh sau.
Select * from Customer;
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Truy vấn xóa sẽ xóa dữ liệu bản ghi của khách hàng có tuổi = 25. Lệnh Rollback, khôi phục những thay đổi đó trên bảng Khách hàng.
Ví dụ cho Savepoint
Savepoint là một điểm trong giao dịch khi bạn có thể chuyển giao dịch trở lại một điểm nhất định mà không cần lùi toàn bộ giao dịch.
Chúng ta hãy coi cùng một bảng Khách hàng là đầu vào.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
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 |
Chúng ta hãy xem xét trong ví dụ này, bạn dự định xóa ba bản ghi khác nhau khỏi bảng Khách hàng. Bạn muốn tạo một Điểm lưu trước mỗi lần xóa, để bạn có thể quay lại bất kỳ Điểm lưu nào bất kỳ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu.
Đây là một loạt các hoạt động.
SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;
Bây giờ, bạn đã tạo ba Savepoint và xóa ba bản ghi. Trong trường hợp này, nếu bạn muốn khôi phục các bản ghi có Id 2 và 3 thì hãy sử dụng lệnh Rollback sau.
ROLLBACK TO SP2;
Lưu ý rằng chỉ lần xóa đầu tiên diễn ra kể từ khi bạn quay trở lại SP2. Sử dụng truy vấn sau để hiển thị tất cả các bản ghi của khách hàng.
Select * from Customer;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Giải phóng điểm lưu
Chúng ta có thể giải phóng Savepoint bằng lệnh RELEASE. Sau đây là cú pháp chung.
RELEASE SAVEPOINT SAVEPOINT_NAME;