Hướng dẫn tập thể dục Transactional năm 2024

Transaction trong SQL là một đơn vị công việc được thực hiện bởi một Database. Transaction là đơn vị hoặc dãy công việc được thực hiện theo một thứ tự logic và hợp lý, có thể được thao tác bởi người dùng hoặc bởi một Database program.

Một transaction là một sự lan truyền của một hoặc nhiều thay đổi tới Database. Ví dụ, nếu bạn đang tạo một bản ghi hoặc cập nhật một bản ghi hoặc xóa một bản ghi từ một bảng, thì bạn đang thực hiện transaction trên bảng đó. Nó là quan trọng để điều khiển các transaction để bảo đảm toàn vẹn dữ liệu và để xử lý các Database Error.

Thực tế, bạn sẽ tập hợp nhiều truy vấn SQL vào trong một nhóm và sẽ thực thi tất cả truy vấn này cùng với nhau như là một phần của một transaction.

Property của Transaction trong SQL

Transaction có 4 property chuẩn, thường được tham chiếu bởi tên lược danh là ACID:

  • Atomicity: bảo đảm rằng tất cả hoạt động bên trong đơn vị công việc được hoàn thành một cách thành công; nếu không, transaction bị ngừng ở điểm thất bại, và các hoạt động trước được trao trả về trạng thái trước đó.
  • Consistency: bảo đảm rằng Database thay đổi một cách chính xác trạng thái theo một transaction đã được ký thác thành công.
  • Isolation: cho các transaction khả năng hoạt động một cách độc lập và không liên quan đến nhau.
  • Durability: bảo đảm rằng kết quả hoặc tác động của một transaction, mà đã được ký thác, vẫn còn tồn tại trong trường hợp hệ thống thất bại.

Điều khiển transaction trong SQL

Trong SQL, có các lệnh sau được sử dụng để điều khiển transaction:

  • COMMIT: để lưu các thay đổi.
  • ROLLBACK: để quay trở lại trạng thái trước khi có thay đổi.
  • SAVEPOINT: tạo các điểm (point) bên trong các nhóm transaction để ROLLBACK, tức là để quay trở lại điểm trạng thái đó.
  • SET TRANSACTION: đặt một tên cho một transaction.

Các lệnh điều khiển transaction chỉ được sử dụng với các lệnh INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong khi tạo và xóa bảng, bởi vì những hoạt động này được ký thác tự động trong Database.

Lệnh COMMIT trong SQL

Lệnh COMMIT là lệnh điều khiển transaction được sử dụng để lưu các thay đổi đã được triệu hồi bởi một transaction tới Database.

Lệnh COMMIT lưu giữ tất cả transaction trong Database từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp cơ bản của lệnh COMMIT là như sau:

COMMIT;

Quảng cáo

Ví dụ

Bảng SINHVIEN có các bản ghi sau:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

Ví dụ sau sẽ xóa các bản ghi từ bảng mà có tuoi = 19 và sau đó COMMIT các thay đổi vào trong Database.

SQL> DELETE FROM SINHVIEN

 WHERE TUOI = 19;
SQL> COMMIT;

Trong kết quả thu được, hai hàng của bảng sẽ bị xóa và lệnh SELECT sẽ cho kết quả sau:

++--+-+---+--+

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
3 Thanh 18 KTDN 4000000
5 Huong 20 TCNH 5000000
+----+----------+-----+-----------+----------+

Quảng cáo

Lệnh ROLLBACK trong SQL

Lệnh ROLLBACK là lệnh điều khiển transaction được sử dụng để trao trả transaction về trạng thái trước khi có các thay đổi mà chưa được lưu tới Database.

Lệnh ROLLBACK chỉ có thể được sử dụng để undo các transaction từ lệnh COMMIT hoặc ROLLBACK cuối cùng được thông báo.

Cú pháp cơ bản của lệnh ROLLBACK như sau:

ROLLBACK;

Ví dụ

Bảng SINHVIEN có các bản ghi sau:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

Bây giờ sử dụng lệnh ROLLBACK với lệnh xóa tuoi = 19, mà chưa được commit như sau:

SQL> DELETE FROM SINHVIEN

 WHERE TUOI = 19;
SQL> ROLLBACK;

Trong kết quả thu được, hoạt động Delete này không ảnh hưởng tới bảng và lệnh SELECT sẽ cho kết quả:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

Lệnh SAVEPOINT trong SQL

Một SAVEPOINT là một điểm (point) trong một transaction khi bạn có thể lùi transaction về một điểm cụ thể mà không cần lùi transaction về trạng thái đầu trước khi có thay đổi đó.

Cú pháp cơ bản của lệnh SAVEPOINT như sau:

SAVEPOINT TEN_CUA_SAVEPOINT;

Lệnh này chỉ phục vụ trong việc tạo một SAVEPOINT trong các lệnh điều khiển transaction. Lệnh ROLLBACK được sử dụng để undo một nhóm các transaction.

Cú pháp để lùi về một SAVEPOINT như sau:

ROLLBACK TO TEN_CUA_SAVEPOINT;

Trong ví dụ sau, bạn muốn xóa 3 bản ghi khác nhau từ bảng SINHVIEN. Bạn muốn tạo một SAVEPOINT trước mỗi lệnh DELETE, để mà bạn có thể ROLLBACK về bất kỳ SAVEPOINT nào tại bất cứ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu của nó.

Ví dụ

Bảng SINHVIEN có các bản ghi sau:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

Dưới đây là một dãy các hoạt động:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

1

Ở trên, có 3 hoạt động xóa diễn ra. Sau một lúc, bạn thay đổi suy nghĩ và quyết định ROLLBACK về SAVEPOINT mà bạn đã xác định là SP2. Bởi vì SP2 được tạo sau hoạt động xóa đầu tiên, do đó hai hoạt động xóa cuối cùng được undo.

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

2

Chú ý rằng, chỉ có hoạt động xóa đầu tiên diễn ra khi bạn rollback về SP2.

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

3

Lệnh RELEASE SAVEPOINT trong SQL

Lệnh RELEASE SAVEPOINT được sử dụng để xóa một SAVEPOINT mà bạn đã tạo.

Cú pháp cơ bản của lệnh RELEASE SAVEPOINT trong SQL như sau:

++-+-+---++

ID TEN TUOI KHOAHOC HOCPHI
+----+---------+-----+-----------+---------+
1 Hoang 21 CNTT 4000000
2 Viet 19 DTVT 3000000
3 Thanh 18 KTDN 4000000
4 Nhan 19 CK 4500000
5 Huong 20 TCNH 5000000
+----+---------+-----+-----------+---------+

4

Một khi một SAVEPOINT đã bị xóa, bạn không thể sử dụng lệnh ROLLBACK để lùi transaction về SAVEPOINT đó nữa.

Lệnh SET TRANSACTION trong SQL

Lệnh SET TRANSACTION có thể được sử dụng để khởi tạo một Database Transaction. Lệnh này được sử dụng để xác định đặc trưng cho transaction đó.