ใน trigger definition ใช้ OLD และ NEW อ้างอิงคอลัมน์ของแถวที่ถูก INSERT, UPDATE, DELETE:
OLD.column_name— ค่าจากแถวเดิม (ก่อนเปลี่ยนแปลง)NEW.column_name— ค่าในแถวใหม่ (หลังเปลี่ยนแปลง)
เหตุการณ์กระตุ้นกำหนดว่าสามารถใช้ได้อย่างไร:
- INSERT trigger: ใช้
NEW.column_nameได้ (ค่าที่จะ INSERT) —OLDใช้ไม่ได้ - DELETE trigger: ใช้
OLD.column_nameได้ (ค่าที่จะลบ) —NEWใช้ไม่ได้ - UPDATE trigger: ใช้ทั้ง
OLD.column_name(ค่าเก่า) และNEW.column_name(ค่าใหม่) ได้
สรุป: OLD ใช้ได้แบบอ่านอย่างเดียว (read-only) ส่วน NEW อ่าน/เขียนได้
ตัวอย่างใช้ 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)
ตัวอย่างใช้ 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)