Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คำสำคัญ OLD และ NEW ใน Trigger ใช้เข้าถึงคอลัมน์ของแถวที่ได้รับผลกระทบอย่างไร


ใน 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)