Để tạo trigger mới, dùng câu lệnh CREATE TRIGGER. Cú pháp:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END;
Giải thích:
- trigger_name: tên trigger, đặt sau
CREATE TRIGGER. Quy ước đặt tên:[trigger_time]_[table_name]_[trigger_event], ví dụ:before_student_update,after_student_insert. - trigger_time: thời điểm kích hoạt,
BEFOREhoặcAFTER. Bắt buộc chỉ định. DùngBEFOREnếu muốn xử lý trước thay đổi,AFTERnếu sau thay đổi. - trigger_event:
INSERT,UPDATE, hoặcDELETE. Sự kiện này kích hoạt trigger. Một trigger chỉ được kích hoạt bởi một sự kiện. Muốn nhiều sự kiện, tạo nhiều trigger. - table_name: tên bảng. Trigger luôn gắn với một bảng cụ thể. Không có bảng thì trigger không tồn tại, nên chỉ định sau từ khóa
ON. - BEGIN...END: khối định nghĩa logic cho trigger.
Ví dụ
Tạo bảng Student_age:
mysql> Create table Student_age(age INT, Name Varchar(35)); Query OK, 0 rows affected (0.80 sec)
Tạo trigger tự động gán age = 0 nếu chèn age < 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)
Kích hoạt trigger:
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)
Kết quả cho thấy khi chèn giá trị âm, trigger tự động gán thành 0. Đây là ví dụ trigger với trigger_event = INSERT và trigger_time = BEFORE.