ดังที่เราทราบในนิยามทริกเกอร์ เราสามารถอ้างถึงคอลัมน์ของแถวที่แทรก อัปเดต หรือลบได้ ต่อไปนี้เป็นวิธีที่คำหลัก OLD และ NEW ทำให้เราสามารถเข้าถึงคอลัมน์ต่างๆ -
-
เราต้องเติมคำนำหน้าชื่อคอลัมน์ด้วย qualifier เพื่ออ้างถึงค่าจากแถวเดิม
-
เราต้องเติมคำนำหน้าชื่อคอลัมน์ด้วย qualifier ของ NEW เพื่ออ้างอิงถึงค่าในแถวใหม่
ตอนนี้ การใช้ OLD และ NEW จะต้องดำเนินการอย่างเหมาะสม เนื่องจากเหตุการณ์ทริกเกอร์
กำหนดว่าสิ่งใดที่อนุญาต -
-
ในทริกเกอร์ INSERT NEW.column_name จะระบุค่าของคอลัมน์ที่จะแทรกลงในแถวใหม่ ไม่อนุญาต OLD ที่นี่
-
ในทริกเกอร์ DELETE OLD.column_name จะระบุค่าของคอลัมน์ในแถวที่จะลบ ที่นี่ไม่อนุญาตให้ใช้ NEW
-
ในทริกเกอร์ UPDATE OLD.column_name และ NEW.column_name จะอ้างอิงถึงค่าของคอลัมน์ในแถวก่อนและหลังการอัปเดตแถวตามลำดับ
กล่าวอีกนัยหนึ่ง เราสามารถพูดได้ว่า OLD ต้องใช้ในแบบอ่านอย่างเดียวและ NEW สามารถใช้เพื่ออ่านหรือเปลี่ยนค่าคอลัมน์ได้
การใช้คีย์เวิร์ด OLD ในทริกเกอร์
ทำตามตัวอย่างของ DELETE ทริกเกอร์แสดงการใช้ OLD -
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 แสดงการใช้ NEW -
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)