T-SQL - Giao dịch

A transactionlà một đơn vị công việc được thực hiện dựa trên cơ sở dữ liệu. Giao dịch là các đơn vị hoặc chuỗi công việc được thực hiện theo một thứ tự logic, cho dù theo cách thủ công bởi người dùng hay tự động bởi một số loại chương trình cơ sở dữ liệu.

Giao dịch là sự truyền bá một hoặc nhiều thay đổi đối với cơ sở dữ liệu. Ví dụ: nếu bạn đang tạo bản ghi hoặc cập nhật bản ghi hoặc xóa bản ghi khỏi bảng, thì bạn đang thực hiện một giao dịch trên bảng. Điều quan trọng là kiểm soát các giao dịch để đảm bảo tính toàn vẹn của dữ liệu và xử lý các lỗi cơ sở dữ liệu.

Thực tế, bạn sẽ kết hợp nhiều truy vấn SQL thành một nhóm và bạn sẽ thực hiện tất cả chúng cùng nhau như một phần của giao dịch.

Thuộc tính của giao dịch

Giao dịch có bốn thuộc tính tiêu chuẩn sau, thường được gọi bằng từ viết tắt ACID -

  • Atomicity- Đảm bảo rằng tất cả các hoạt động trong đơn vị công việc được hoàn thành 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 đó được khôi phục lại trạng thái cũ của chúng.

  • Consistency - Đảm bảo rằng cơ sở dữ liệu thay đổi trạng thái đúng cách khi giao dịch được cam kết thành công.

  • Isolation - Cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.

  • Durability - Đảm bảo rằng kết quả hoặc hiệu quả 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.

Kiểm soát giao dịch

Có các lệnh sau được sử dụng để kiểm soát các giao dịch:

  • COMMIT - Để lưu các thay đổi.

  • ROLLBACK - Để quay lại các thay đổi.

  • SAVEPOINT - Tạo điểm trong các nhóm giao dịch để QUAY LẠI.

  • SET TRANSACTION - Đặt tên cho một giao dịch.

Các lệnh điều khiển giao dịch chỉ được sử dụng với các lệnh DML chỉ INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong khi tạo bảng hoặc bỏ chúng vì các hoạt động này được tự động cam kết trong cơ sở dữ liệu.

Để sử dụng các lệnh điều khiển giao dịch trong MS SQL Server, chúng ta phải bắt đầu giao dịch bằng lệnh 'begin tran' hoặc bắt đầu giao dịch nếu không các lệnh này sẽ không hoạt động.

Lệnh COMMIT

Lệnh COMMIT là lệnh giao dịch được sử dụng để lưu các thay đổi được gọi bởi một giao dịch vào cơ sở dữ liệu. Lệnh này lưu tất cả các giao dịch vào cơ sở dữ liệu kể từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp

Sau đây là cú pháp cho lệnh COMMIT.

COMMIT;

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau.

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

Ví dụ lệnh sau sẽ xóa các bản ghi khỏi bảng có age = 25 và sau đó COMMIT các thay đổi trong cơ sở dữ liệu.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

Kết quả là, hai hàng trong bảng sẽ bị xóa và câu lệnh SELECT sẽ tạo ra kết quả sau.

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

Lệnh ROLLBACK

Lệnh ROLLBACK là lệnh giao dịch được sử dụng để hoàn tác các giao dịch chưa được lưu vào cơ sở dữ liệu. Lệnh này chỉ có thể được sử dụng để hoàn tác các giao dịch kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành.

Cú pháp

Sau đây là cú pháp cho lệnh ROLLBACK.

ROLLBACK

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau.

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

Ví dụ lệnh sau sẽ 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.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

Do đó, thao tác xóa sẽ không ảnh hưởng đến bảng và câu lệnh SELECT sẽ tạo ra kết quả sau.

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Lệnh 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 quay lại toàn bộ giao dịch.

Cú pháp

Sau đây là cú pháp cho lệnh SAVEPOINT.

SAVE TRANSACTION SAVEPOINT_NAME

Lệnh này chỉ phục vụ trong việc tạo SAVEPOINT giữa các câu lệnh giao dịch. Lệnh ROLLBACK được sử dụng để hoàn tác một nhóm giao dịch.

Sau đây là cú pháp để quay trở lại SAVEPOINT.

ROLLBACK TO SAVEPOINT_NAME

Trong ví dụ sau, chúng tôi sẽ xóa ba bản ghi khác nhau khỏi bảng CUSTOMERS. Chúng tôi sẽ phải tạo một SAVEPOINT trước mỗi lần xóa, để chúng tôi có thể QUAY LẠI bất kỳ SAVEPOINT nào bất kỳ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Sau đây là một loạt các hoạt động -

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

Ba lần xóa đã diễn ra, tuy nhiên, chúng tôi đã thay đổi ý định và quyết định QUAY LẠI về SAVEPOINT mà chúng tôi đã xác định là SP2. Vì SP2 được tạo sau lần xóa đầu tiên, hai lần xóa cuối cùng sẽ được hoàn tác -

ROLLBACK Transaction SP2 
Rollback complete.

Lưu ý rằng chỉ lần xóa đầu tiên diễn ra kể từ khi chúng tôi quay trở lại SP2.

SELECT * FROM CUSTOMERS

Đã chọn 6 hàng.

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Đặt lệnh GIAO DỊCH

Lệnh SET TRANSACTION có thể được sử dụng để bắt đầu một giao dịch cơ sở dữ liệu. Lệnh này được sử dụng để chỉ định các đặc điểm cho giao dịch sau đó.

Cú pháp

Sau đây là cú pháp cho ĐẶT GIAO DỊCH.

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>