Transaction (giao tác) là một tập hợp các thao tác thực thi xuống database cùng với nhau như là một khối thống nhất của công việc (unit of work); hoặc là chúng đều thực thi thành công hoàn toàn hoặc không thực hiện bất kỳ lệnh nào (all or nothing).
Ví dụ: A chuyển cho B $500. Hệ thống cần thực hiện 2 thao tác:
Trừ tài khoản A $500.
Cộng tài khoản B $500.
Phải đảm bảo cả 2 thao tác trên thành công thì giao tác chuyển tiền mới thực hiện thành công.
Đây là 4 đặc điểm của transaction.
Atomicity (bảo toàn): “hoặc là tất cả hoặc là không gì hết”.
Consistency (nhất quán): dữ liệu từ thời điểm start transaction với lúc kết thúc phải nhất quán.
Isolation (cô lập): nếu chúng ta có nhiều transaction cùng một lúc thì phải đảm bảo là các transaction này xảy ra độc lập, không tác động lẫn nhau trên dữ liệu.
Durability (bền vững): dữ liệu sau khi thực hiện transaction sẽ không thay đổi nếu chúng ta gặp vấn đề gì đó liên quan đến database
Giao dịch tường minh (Explicit transaction): Là một transaction mà chúng ta phải định nghĩa bắt đầu một transaction (Begin transaction) và kết thúc một transaction (Commit Transaction)
Giao dịch ngầm định (Implicit transaction): Tự động khởi tạo ngay khi ở chế độ ON và SQL Server chạy, chỉ cần điều khiển commit hay rollback transaction này. SQL Server tự động bắt đầu một transaction khi nó thực thi bất kỳ các lệnh sau: Alter Table, Create, Delete, Drop, Fetch, Grant, Insert, Open, Revoke, Select, Truncate Table, Update.
Nhật ký giao dịch (Transaction log) là một File riêng biệt (hoặc lưu ở vùng đĩa riêng) ở trong database server. Nó lưu trữ dấu vết thực hiện của các thao tác;
Bằng cách lưu trữ dấu vết thực hiện trong tệp nhật ký (file log), database server dễ dàng khôi phục lại dữ liệu khi gặp sự cố;
Transaction log đảm bảo tính hoàn chỉnh và tính bền vững;
SQL Server viết tất cả các thay đổi trên CSDL xuống transaction log, vì vậy nếu transaction đã bắt đầu nhưng chưa chạy xong, chúng ta vẫn có thể phục hồi lại tất cả các thay đổi từ file log.
BEGIN TRAN[SACTION]: Bắt đầu một transaction
SAVE TRAN[SACTION]: Đánh dấu vị trí trong transaction (điểm đánh dấu)
SAVEPOINT: Đánh dấu một điểm nhất định trong một transaction cụ thể để ROLLBACK.
SAVEPOINT RELEASE: loại bỏ một SAVEPOINT mà bạn đã tạo ra.
ROLLBACK TRAN[SACTION]: Quay lui lại đầu transaction hoặc điểm đánh dấu trước đó (SAVEPOINT) trong transaction.
COMMIT TRANSACTION: Đánh dấu điểm kết thúc của một transaction, khi câu lệnh này thực thi có nghĩa là transaction thực hiện thành công.
ROLLBACK [WORK]: Quay lui lại đầu transaction.
COMMIT [WORK]: Đánh dấu kết thúc transaction.
Slide bài giảng: https://bit.ly/sql15-transaction
Code demo: https://bit.ly/demo-sql-transaction
Transact-SQL: The Building Blocks to SQL Server Programming by Gregory A. Larsen
Free eBook download (PDF): Download here.