Trigger trong SQL là một tính năng cho phép bạn đặt một sự kiện khi một hoạt động nhất định xảy ra trên một bảng cơ sở dữ liệu. Khi một sự kiện xảy ra, trigger sẽ chạy một mã SQL để tự động thực hiện các thao tác cần thiết trên dữ liệu hoặc cấu trúc cơ sở dữ liệu. Triggers có thể được sử dụng để bảo vệ dữ liệu, hoặc để tự động thực hiện các thao tác khi dữ liệu được thay đổi.
Các bài viết liên quan:
Khi nào ta nên sử dụng trigger
Trong SQL, trigger (còn gọi là cờ bắt sự kiện) là một đoạn mã tự động thực thi khi một sự kiện xảy ra trên bảng dữ liệu nhất định. Ví dụ như khi có một hành động insert, update hoặc delete dữ liệu từ một bảng, trigger sẽ tự động thực thi một số tác vụ liên quan, chẳng hạn như thêm dữ liệu vào một bảng khác hoặc gửi một email thông báo cho người quản lý.
Chúng ta nên sử dụng trigger khi muốn tự động hoá một số tác vụ liên quan đến dữ liệu mà không cần phải viết thủ công hoặc khi muốn tự động thực thi một số tác vụ khi có sự thay đổi trong dữ liệu.
Cú pháp của Trigger
Cú pháp của trigger trong SQL được viết như sau:
CREATE TRIGGER trigger_name AFTER/BEFORE INSERT/UPDATE/DELETE ON table_name FOR EACH ROW BEGIN -- trigger code END;
trigger_name
: Tên của triggerAFTER/BEFORE
: Xác định trigger sẽ chạy sau hoặc trước khi hoàn tất hoạt độngINSERT/UPDATE/DELETE
trên bảng.ON table_name
: Tên bảng mà trigger sẽ chạy.FOR EACH ROW
: Xác định rằng trigger sẽ chạy cho mỗi hàng mà hoạt độngINSERT/UPDATE/DELETE
đềuệt đến.BEGIN
: Bắt đầu với mã triggerEND;
: Kết thúc mã trigger.
Ví dụ về trigger
Ví dụ về trigger trong SQL là tạo một trigger để theo dõi sự thay đổi trong bảng “Employees” và ghi lại những thay đổi này trong bảng “Employee_History”.
Cú pháp như sau:
CREATE TRIGGER tr_Employee_History AFTER INSERT OR UPDATE OR DELETE ON Employees FOR EACH ROW BEGIN IF (INSERTING) THEN INSERT INTO Employee_History (EmployeeID, Action, ActionDate) VALUES (NEW.EmployeeID, 'Insert', SYSDATE); ELSEIF (UPDATING) THEN INSERT INTO Employee_History (EmployeeID, Action, ActionDate) VALUES (OLD.EmployeeID, 'Update', SYSDATE); ELSE INSERT INTO Employee_History (EmployeeID, Action, ActionDate) VALUES (OLD.EmployeeID, 'Delete', SYSDATE); END IF; END;
Trong đó, AFTER INSERT OR UPDATE OR DELETE
xác định trigger sẽ được kích hoạt sau khi thực hiện một thao tác INSERT, UPDATE hoặc DELETE trên bảng Employees
. FOR EACH ROW
xác định trigger sẽ được kích hoạt cho mỗi dòng dữ liệu được thay đổi. Cuối cùng, các lệnh INSERT
được thực hiện trong câu lệnh IF
để ghi lại những thay đổi vào bảng Employee_History
.