TRIGGER TRONG SQL


1. Cấu trúc cơ bản (SQL Server)

Cú pháp chung để tạo một trigger thường bao gồm các thành phần: tên trigger, bảng áp dụng, thời điểm kích hoạt và nội dung câu lệnh

CREATE TRIGGER [Tên_Trigger]
ON [Tên_Bảng]
AFTER INSERT, UPDATE, DELETE -- Thời điểm và sự kiện kích hoạt
AS
BEGIN
    -- Nội dung các câu lệnh SQL xử lý logic tại đây
END;

2. Các thành phần quan trọng

  • Sự kiện kích hoạt: Gồm INSERT (thêm mới), UPDATE (cập nhật), hoặc DELETE (xóa).
  • Bảng tạm hệ thống: Khi trigger chạy, SQL Server sử dụng hai bảng tạm để quản lý dữ liệu thay đổi:
    • Inserted: Chứa dữ liệu mới vừa được chèn hoặc giá trị mới sau khi update.
    • Deleted: Chứa dữ liệu cũ vừa bị xóa hoặc giá trị cũ trước khi update.
  • Thời điểm (Timing):
    • AFTER (hoặc FOR): Chạy sau khi thao tác dữ liệu đã hoàn tất thành công.
    • INSTEAD OF: Chạy thay thế hoàn toàn cho thao tác dữ liệu gốc.

3. Ví dụ minh họa

Giả sử bạn có bảng Inventory (Kho) và muốn tự động trừ số lượng tồn kho mỗi khi có một dòng mới được thêm vào bảng OrderDetails (Chi tiết đơn hàng). 

CREATE TRIGGER trg_UpdateStock

ON OrderDetails AFTER INSERT

AS

BEGIN

    UPDATE Inventory SET StockQuantity = StockQuantity - (SELECT Quantity FROM inserted) WHERE ProductID = (SELECT ProductID FROM inserted);

END;

4. Lưu ý khi sử dụng

  • Hiệu năng: Đừng viết quá nhiều logic phức tạp trong trigger vì nó sẽ làm chậm các thao tác ghi dữ liệu (insert/update/delete).
  • Gỡ lỗi: Trigger chạy ngầm nên việc phát hiện lỗi có thể khó khăn hơn so với stored procedure thông thường.
  • Xóa trigger: Nếu không cần dùng nữa, bạn sử dụng lệnh DROP TRIGGER [Tên_Trigger]