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>