Trong định nghĩa trigger, ta có thể tham chiếu cột của hàng đang chèn, cập nhật hoặc xóa. Cách OLD và NEW cho phép truy cập:
- Gắn tiền tố
OLDcho tên cột để tham chiếu giá trị từ hàng gốc. - Gắn tiền tố
NEWcho tên cột để tham chiếu giá trị trong hàng mới.
Sự kiện kích hoạt quyết định cái nào được phép:
- INSERT trigger:
NEW.column_namechỉ giá trị cột sẽ chèn vào hàng mới.OLDkhông được phép. - DELETE trigger:
OLD.column_name chỉ giá trị cột trong hàng sẽ xóa.NEWkhông được phép. - UPDATE trigger:
OLD.column_namevàNEW.column_namelần lượt tham chiếu giá trị cột trước và sau khi cập nhật.
Nói cách khác: OLD chỉ dùng đọc (read-only), NEW có thể đọc hoặc thay đổi giá trị cột.
Ví dụ dùng OLD (DELETE trigger)
mysql> CREATE TRIGGER studentinfo_after_delete -> AFTER DELETE -> ON student_info -> FOR EACH ROW FOLLOWS -> BEGIN -> DECLARE vuser varchar(30); -> SELECT USER() into vuser; -> INSERT INTO student_info_deleted(id,deleted_date,deleted_by) VALUES(OLD.id,SYSDATE(),vuser); -> END; // Query OK, 0 rows affected (0.25 sec)
Ví dụ dùng NEW (INSERT trigger)
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)