Trigger là gì?
Trong SQL, Trigger là một loại thủ tục SQL được kích hoạt tự động tại phía server khi có các sự kiện như Insert, Delete, hoặc Update xảy ra. Đây thường là một dạng stored procedure đặc biệt, không yêu cầu tham số và được tự động thực thi ngay khi có các sự kiện thay đổi dữ liệu. Trigger được lưu trữ và quản lý trong Server DB, chủ yếu được sử dụng để kiểm tra và duy trì ràng buộc toàn vẹn đối với cơ sở dữ liệu.
Định nghĩa Trigger là gì?
Trigger có khả năng chạy một cách tự động và sẽ được lưu trữ trong database server. Từ đó, chúng sẽ được sử dụng với mục đích kiểm tra được những sự ràng buộc toàn vẹn của dữ liệu.
Lúc nào thì Trigger sẽ được sử dụng?
Sau khi hiểu rõ Trigger là gì thì chắc chắn bạn đang băn khoăn và không biết lúc nào thì trigger sẽ được sử dụng đúng không nào? Hãy tìm hiểu kỹ lưỡng hơn về phương diện này qua thông tin dưới đây:
- Trigger sẽ được ưu tiên sử dụng nhằm mục đích phục vụ các kiểm tra ràng buộc trên nhiều mối quan hệ và các dòng code trên nhiều dòng sản phẩm khác của bảng.
- Sử dụng Trigger giúp cho chương trình có thể thực hiện chạy các hàm ngầm nhằm mục đích phục vụ những trường hợp hữu hạn. Thường thì Trigger không được sử dụng thường xuyên cho các mục đích kinh doanh hoặc các giao dịch khác.
- Ngoài ra, Trigger còn có khả năng ngăn chặn vấn đề xóa dữ liệu quan trọng xảy ra thì Ngăn chặn việc xóa những dữ liệu quan trọng. Bạn có thể sử dụng back up cho các dữ liệu quan trọng khác khi sang table khác có ở trong phòng khi,… sẽ bị xóa ngoài ý muốn).
Ưu và nhược điểm của Trigger là gì?
Để bạn hiểu rõ hơn về Trigger thì ngay sau đây chúng ta hãy cùng điểm qua những ưu điểm và nhược điểm của nó nhé.
Ưu điểm của Trigger là gì?
- Trigger có khả năng bắt được các lỗi business logic ở các mức csdl.
- Lập trình viên có thể sử dụng trigger như một cách khác biệt để có thể thay thế được những công việc cần phải hẹn giờ theo lịch.
- Trigger được đánh giá nhờ mang lại hiệu quả cao khi được sử dụng để thực hiện kiểm soát cho các thay đổi khác của dữ liệu bên trong bảng.
Trigger có khả năng bắt được lỗi business logic
Nhược điểm của Trigger là gì?
- Trigger là một trong những phần mở rộng của việc kiểm tra lại các tính chất hợp lệ của dữ liệu mà không thực hiện thay thế hoàn toàn được các công việc thế này.
- Trigger thường hoạt động ngầm ở trong csdl, nó không được hiển thị ở tầng giao diện. Do vậy, rất khó cho lập trình viên trong việc chỉ ra được điều gì sẽ xảy ra ở trong tầng csdl.
- Trigger có thể thực hiện được những update lên bộ phận bảng dữ liệu. Chính vì vậy, nó có thể giúp bạn gia tăng lượng công việc lên csdl và có thể làm hệ thống chạy chậm lại.
Hướng dẫn cách sử dụng Trigger cho người mới
Để có thể tạo ra được một Trigger phù hợp thì bạn cần phải sử dụng câu lệnh sau: CREATE TRIGGER:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
…
END;
Trong số đó:
- Mỗi một Trigger đều sẽ được khởi tạo ngay sau câu lệnh CREATE TRIGGER. Với quy tắc đặt tên sẽ được tuân theo nguyên tắc như sau: [trigger time]_[table name]_[trigger event]. Ví dụ như: before_employees_update.
Cú pháp của Trigger
- Về khoảng thời gian kích hoạt: BEFORE hoặc AFTER thì lập trình viên cần phải đưa ra được chỉ định thời gian kích hoạt. Hoặc có thể bạn cần phải xác định được việc tiến hành kích hoạt của nó. Từ đó, sử dụng từ khóa BEFORE nếu như bạn đang muốn xử lý được hành động trước khi thực hiện được các thay đổi khác trên bản. Bạn có thể chọn AFTER nếu như bạn đang cần phải xử lý các hành động ngay sau khi các thay đổi đã được thực hiện xong và triệt để.
- Các sự kiện nếu được gây ra đều sẽ có thể là: INSERT, UPDATE, DELETE.
- Các trình kích hoạt của của hệ thống sẽ được liên kết với các bảng cụ thể và bạn chỉ cần sử dụng từ khóa ON để xác định.
- Các câu lệnh SQL cần phải được đặt ở giữa hai từ khóa là BEGIN và END.
Ví dụ cụ thể như sau:
Các Trigger có khả năng tạo ra báo cáo cơ sở dữ liệu cho học sinh, ghi lại đánh giá điểm của tất cả các bộ phận học sinh. Trong cấu trúc này, có thể tạo một Trigger để thực hiện tính tổng và các giá trị trung bình của các bảng được chỉ định. Quá trình tự động chèn dữ liệu vào một bản ghi được kích hoạt sau mỗi lần nhập liệu.
Vì Trigger được kích hoạt trước khi bản ghi được chèn, thích hợp sử dụng các thẻ BEFORE.
Dòng lệnh SQL trên sẽ tạo một Trigger trong cơ sở dữ liệu sinh viên. Mỗi khi điểm môn học được nhập, Trigger sẽ tính toán giá trị tổng và trung bình trước khi chèn dữ liệu này vào cơ sở dữ liệu, bao gồm cả các giá trị nhập khác.
insert into Student values(0, “ABCDE”, 20, 20, 20, 0, 0);
Query OK, 1 row affected (0.09 sec)
Nhờ vào cách này, trigger đã có thể được tạo ra và thực thi trong những có sở dữ liệu phù hợp hơn.
Một ví dụ cụ thể khi sử dụng trigger trong SQL:
Chúng ta sẽ có bảng employees như sau:
Bảng employees
Ngay lúc này, bạn sẽ thực hiện tạo 1 TRIGGER với các chức năng chính như: lưu lại lịch sử UPDATE các thông tin của mỗi một EMPLOYEE. Trước hết thì chúng ta sẽ thực hiện bước tạo mới một employees_edit để có thể lưu lại được các thay đổi nhất định ở trên bảng employee:
CREATE TABLE employees_audit (
id INT AUTO_INCREMENT PRIMARY KEY,
employeeNumber INT NOT NULL,
lastname VARCHAR(50) NOT NULL,
changedat DATETIME DEFAULT NULL,
action VARCHAR(50) DEFAULT NULL
);
Tiếp theo, bạn sẽ thực hiện viết TRIGGER để có thể thực hiện được một số chức năng lưu lại vào thời điểm có thể thay đổi employees. Bước viết sẽ thực hiện như sau:
DELIMITER $$
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_edit
SET action = ‘update’,
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedat = NOW();
END$$
DELIMITER ;
Trong thân cú pháp Trigger sẽ sử dụng được từ khóa OLD
Trong phạm vi các cú pháp TRIGGER, chúng ta có khả năng sử dụng từ khóa OLD để tiếp cận các giá trị của cột employee Number và lastname trước khi chúng bị ảnh hưởng bởi TRIGGER. Cần lưu ý rằng, trong trường hợp của TRIGGER cho INSERT, chỉ có thể sử dụng từ khóa NEW.
Đối với TRIGGER liên quan đến DELETE, thường không có bản ghi mới, do đó chỉ cần sử dụng từ khóa OLD là đủ. Trong trường hợp của TRIGGER áp dụng cho các hàm UPDATE, từ khóa OLD được sử dụng để tham chiếu đến các giá trị trước khi quá trình cập nhật bắt đầu. Ngược lại, từ khóa NEW được sử dụng để tham chiếu đến các giá trị sau khi quá trình cập nhật hoàn tất.
Để kiểm tra tất cả các TRIGGER tồn tại trong cơ sở dữ liệu, bạn có thể sử dụng:
SHOW TRIGGERS;
Sau khi bắt đầu cập nhật bảng của employees để kiểm tra cho TRIGGER vừa được định nghĩa thì chúng sẽ như sau:
UPDATE employees
SET
lastName = ‘Phan’
WHERE
employeeNumber = 1056;
Nếu bạn muốn kiểm tra xem TRIGGER đã được thực hiện hay là chưa thì có thể truy vấn vào bảng employees_edit để theo dõi:
SELECT * FROM employees_edit;
Các kết quả truy vấn trả về sẽ như sau:
Từ đó, Trigger đã được thực hiện và nó cũng đã chèn được một bản ghi mới vào trong bảng employees_edit.
Tổng kết
Dưới đây là những thông tin tổng quan về khái niệm Trigger mà Blog muốn chia sẻ với độc giả. Mong rằng, thông qua những kiến thức này, bạn sẽ có cái nhìn tổng quan và sâu sắc hơn về khái niệm Trigger, cũng như biết cách ứng dụng nó một cách chính xác hơn trong quá trình thực hiện công việc.