TRANSACTION trong SQL là tiến trình thực hiện một nhóm những câu lệnh SQL. Các câu lệnh này được thực thi một nhữngh tuần tự và độc lập. Một Transaction được thực hiện thành công lúc tất cả câu lệnh đều thành công, lúc đó tất cả những thay đổi dữ liệu được thực hiện trong Transaction được lưu vào cơ sở dữ liệu. Tuy nhiên, nếu chỉ một trong số đó thất bại thì toàn bộ tiến trình sẽ thất bại, đồng nghĩa với việc dữ liệu phải rollback về trạng thái ban đầu (dữ liệu được khôi phục về trạng thái trước lúc thực hiện Transaction).
Mục lục
Thuộc tính của Transaction
1. Atomicity – Tính bảo toàn: nguyên tắc “all or nothing”, đảm bảo rằng tất cả những câu lệnh trong nhóm lệnh được thực thi thành công. Nếu ko, Transaction bị hủy bỏ tại thời điểm thất bại và tất cả những thao tác trước đó được khôi phục về trạng thái cũ đồng nghĩa với việc ko mang gì thay đổi về mặt dữ liệu.
2. Consistency – Tính nhất quán: đảm bảo rằng cơ sở dữ liệu thay đổi chính xác những trạng thái lúc một transaction được thực thi thành công.
3. Isolation – Tính độc lập: cho phép những Transaction hoạt động độc lập và minh bạch với nhau.
4. Durability – Tính bền vững: đảm bảo rằng kết quả của một transaction được xác định, ko mang chuyện dữ liệu của Transaction sau lúc thực thi mang thể chuyển lại trạng thái dữ liệu lúc trước lúc thực hiện.
Xử lý Transaction
Trong SQL, mang những lệnh sau được sử dụng để điều lúcển Transaction:
- COMMIT: để lưu những thay đổi.
- ROLLBACK: để quay trở lại trạng thái trước lúc mang thay đổi.
- SAVEPOINT: tạo những điểm (point) bên trong những 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 lúcển Transaction chỉ được sử dụng với những lệnh thao tác dữ liệu như INSERT, UPDATE và DELETE. Tuy nhiên chúng ko thể được sử dụng trong lệnh CREATE TABLE hoặc DROP TABLE vì những hoạt động này được tự động xác định trong cơ sở dữ liệu.
Lệnh COMMIT trong SQL
Transaction kết thúc với một trong hai câu lệnh COMMIT hoặc ROLLBACK.
Khi một Transaction hoàn chỉnh được hoàn thành thì lệnh COMMIT phải được gọi ra. Đây là lệnh điều lúcển Transaction được sử dụng để lưu những thay đổi gọi bởi một Transaction tới cơ sở dữ liệu.
Cú pháp cơ bản của lệnh COMMIT như sau:
COMMIT;
Ví dụ: Giả sử bảng NHANVIEN mang những bản ghi như sau:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Ví dụ sau sẽ xóa những bản ghi từ bảng mà mang tuoi = 25 và sau đó COMMIT những thay đổi vào trong Database.
SQL> DELETE FROM NHANVIEN
WHERE TUOI = 25;
SQL> COMMIT;
Vì vậy, hai hàng từ bảng sẽ bị xóa và câu lệnh SELECT sẽ cho kết quả sau.
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Lệnh ROLLBACK trong SQL
Lệnh ROLLBACK là lệnh điều lúcển Transaction được sử dụng để trao trả Transaction về trạng thái trước lúc mang những thay đổi mà chưa được lưu tới Database. Lệnh ROLLBACK chỉ mang thể được sử dụng để undo những Transaction trước lúc xác nhận bằng lệnh Commit hay Rollback cuối cùng.
Cú pháp cơ bản của lệnh ROLLBACK như sau:
ROLLBACK;
Ví dụ: Giả sử bảng NHANVIEN mang những bản ghi như sau:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Bây giờ sử dụng lệnh ROLLBACK với lệnh xóa tuoi = 25, mà chưa được commit như sau:
SQL> DELETE FROM NHANVIEN
WHERE TUOI = 25;
SQL> ROLLBACK;
Trong kết quả thu được, hoạt động DELETE này ko ảnh hưởng tới bảng vì đã ROLLBACK những thay đổi trong cơ sở dữ liệu, lệnh SELECT sẽ cho kết quả:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Lệnh SAVEPOINT trong SQL
SAVEPOINT là một điểm trong một Transaction giúp bạn mang thể lùi Transaction trở lại một điểm nhất định mà ko cần lùi Transaction về trạng thái đầu trước lúc mang thay đổi đó.
Cú pháp cơ bản của lệnh SAVEPOINT như sau:
SAVEPOINT TEN_SAVEPOINT;
Lệnh này chỉ tạo ra SAVEPOINT trong những câu lệnh Transaction. Sau đó ROLLBACK cần được sử dụng để hoàn tác trở lại một SAVEPOINT như sau:
ROLLBACK TO TEN_SAVEPOINT;
Ví dụ: Bạn muốn xóa ba bản ghi khác nhau từ bảng NHANVIEN và muốn tạo SAVEPOINT trước mỗi lần xoá để mang thể ROLLBACK trở lại SAVEPOINT bất kỳ lúc nào giúp trả lại dữ liệu thích hợp cho trạng thái ban đầu.
Giả sử bảng NHANVIEN mang những bản ghi như sau:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Dưới đây là một chuỗi những câu lệnh:
SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM NHANVIEN WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM NHANVIEN WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM NHANVIEN WHERE ID=3;
1 row deleted.
Ở trên, mang 3 hoạt động xóa dữ liệu diễn ra. Giả sử 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 lần thứ nhất, do đó hai hoạt động xóa cuối cùng được khôi phục lại.
SQL> ROLLBACK TO SP2;
Rollback complete.
Vì vậy chỉ mang hoạt động xóa lần thứ nhất diễn ra sau lúc bạn ROLLBACK về SP2.
Lệnh RELEASE SAVEPOINT trong SQL
Lệnh SAVEPOINT RELEASE được sử dụng để loại bỏ một SAVEPOINT mà bạn đã tạo ra. Khi SAVEPOINT bị xóa, bạn ko thể sử dụng lệnh ROLLBACK để hoàn tác những Transaction về SAVEPOINT đó nữa.
Cú pháp của SAVEPOINT RELEASE như sau:
RELEASE SAVEPOINT TEN_SAVEPOINT;
Lệnh SET TRANSACTION trong SQL
SET TRANSACTION mang thể được sử dụng để khởi tạo một Database Transaction. Lệnh này được sử dụng để chỉ định những đặc tính cho Transaction đó. Ví dụ, bạn mang thể chỉ định một Transaction chỉ được đọc (read only) hoặc đọc viết (read write).
Cú pháp cơ bản của lệnh SET TRANSACTION trong SQL như sau:
SET TRANSACTION [ READ WRITE | READ ONLY ];
Trong phần tiếp theo, chúng ta sẽ tìm hiểu về những toán tử đại diện – WILDCARD trong SQL, những bạn nhớ theo dõi nhé.
Các bạn đang xem tin tức tại Tin 24h 24h – Chúc những bạn một ngày vui vẻ
Từ khóa: TRANSACTION trong SQL – Quantrimang.com