Skip to main content

14. Transactions

Objectives

  • Hiểu được cách thức hoạt động của transactions
  • Cách sử dụng transactions
  • Cách sử dụng savepoints
  • Cách quản lý transaction

Transaction là gì?

  • Transaction là một chuỗi các câu lệnh SQL được thực thi như một đơn vị duy nhất. Nếu một câu lệnh trong transaction thất bại, toàn bộ transaction sẽ bị hủy.

  • Transaction có thể xác nhận (commit) hoặc hủy bỏ (rollback).

  • Trong SQL Server hoạt động theo các chế độ giao dịch sau:

    • Transaction tự động xác nhận (Autocommit transactions)
    • Mỗi câu lệnh riêng lẻ được coi là một giao dịch.

Các ứng dụng của transaction

  • Transaction được sử dụng để đảm bảo tính toàn vẹn của dữ liệu trong các ứng dụng doanh nghiệp.
  • Transaction có thể được sử dụng để thực hiện các thao tác như: chuyển tiền, thanh toán hóa đơn, đặt hàng, ...

Các lệnh quản lý transaction

BEGIN TRANSACTION

Dùng để bắt đầu một transaction.

COMMIT TRANSACTION

Dùng để xác nhận toàn bộ một transaction.

COMMIT WORK

Dùng để đánh đấu kết thúc của transaction.

SAVE TRANSACTION

Dùng để tạo một savepoint trong transaction.

ROLLBACK WORK

Dùng để hủy bỏ một transaction.

ROLLBACK TRANSACTION

Dùng để hủy bỏ toàn bộ một transaction.

ROLLBACK TRANSACTION [SavepointName]

Dùng để hủy bỏ một savepoint trong transaction.

Các ví dụ về transaction

Ví dụ 1

Ví dụ 1
BEGIN TRANSACTION
INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 1', 100, 10, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 2', 200, 20, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 3', 300, 30, 10, 1, 1)
COMMIT TRANSACTION

Ví dụ 2

Ví dụ 2
BEGIN TRANSACTION
INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 1', 100, 10, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 2', 200, 20, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 3', 300, 30, 10, 1, 1)
ROLLBACK TRANSACTION

Ví dụ 3

Ví dụ 3
BEGIN TRANSACTION
INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 10', 100, 10, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 20', 200, 20, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 30', 300, 30, 10, 1, 1)

SAVE TRANSACTION Savepoint1

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 40', 400, 40, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 50', 500, 50, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 60', 600, 60, 10, 1, 1)

ROLLBACK TRANSACTION Savepoint1

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 70', 600, 60, 10, 1, 1)

INSERT INTO dbo.Products (Name, Price, Discount, Stock, CategoryId, SupplierId)
VALUES ('Product 80', 600, 60, 10, 1, 1)
COMMIT TRANSACTION