Để tạo một trình kích hoạt mới, chúng ta cần sử dụng câu lệnh CREATE TRIGGER. Cú pháp của nó như sau -
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END;
Đây,
- Trigger_name là tên của trình kích hoạt phải được đặt sau câu lệnh CREATE TRIGGER. Quy ước đặt tên cho trigger_name có thể giống như [thời gian kích hoạt] _ [tên bảng] _ [sự kiện kích hoạt]. Ví dụ:before_student_update hoặc after_student_insert có thể là tên của trình kích hoạt.
- Trigger_time là thời điểm kích hoạt kích hoạt và có thể TRƯỚC hoặc SAU. Chúng ta phải xác định thời gian kích hoạt trong khi xác định trình kích hoạt. Chúng ta phải sử dụng TRƯỚC nếu muốn xử lý hành động trước khi thay đổi được thực hiện trên bảng và SAU KHI muốn xử lý hành động đăng đối với thay đổi được thực hiện trên bảng.
- Trigger_event có thể là CHÈN, CẬP NHẬT hoặc XÓA. Sự kiện này khiến trình kích hoạt được gọi. Một sự kiện chỉ có thể được gọi ra bởi một sự kiện. Để xác định một trình kích hoạt được gọi bởi nhiều sự kiện, chúng tôi phải xác định nhiều trình kích hoạt, một trình kích hoạt cho mỗi sự kiện.
- Tên_bảng là tên của bảng. Trên thực tế, một trình kích hoạt luôn được liên kết với một bảng cụ thể. Nếu không có bảng, trình kích hoạt sẽ không tồn tại, do đó chúng tôi phải chỉ định tên bảng sau từ khóa "ON".
- BẮT ĐẦU… HẾT là khối mà chúng tôi sẽ xác định logic cho trình kích hoạt.
Ví dụ
Giả sử chúng ta muốn áp dụng trình kích hoạt trên bảng Student_age được tạo như sau -
mysql> Create table Student_age(age INT, Name Varchar(35)); Query OK, 0 rows affected (0.80 sec)
Bây giờ, trình kích hoạt sau sẽ tự động chèn tuổi =0 nếu ai đó cố gắng chèn tuổi <0.
mysql> DELIMITER // mysql> Create Trigger before_inser_studentage BEFORE INSERT ON student_age FOR EACH ROW BEGIN IF NEW.age < 0 THEN SET NEW.age = 0; END IF; END // Query OK, 0 rows affected (0.30 sec)
Bây giờ, để gọi trình kích hoạt này, chúng ta có thể sử dụng các câu lệnh sau -
mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul'); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit'); Query OK, 1 row affected (0.11 sec) mysql> Select * from Student_age; +------+---------+ | age | Name | +------+---------+ | 30 | Rahul | | 0 | Harshit | +------+---------+ 2 rows in set (0.00 sec)
Tập hợp kết quả trên cho thấy rằng khi chèn giá trị âm trong bảng sẽ dẫn đến việc chèn 0 bằng trình kích hoạt.
Ở trên là ví dụ về trình kích hoạt với trigger_event là INSERT và trigger_time là TRƯỚC.