MySQL เริ่มต้นใช้งาน Trigger

Trigger เป็นฟีเจอร์สำคัญของ MySQL ที่ช่วยให้ระบบสามารถทำงานอัตโนมัติได้ทันทีเมื่อเกิดเหตุการณ์บางอย่าง เช่น การเพิ่ม แก้ไข หรือลบข้อมูลในตาราง โดยไม่ต้องเรียกใช้คำสั่งจากโปรแกรมหรือแอปพลิเคชันภายนอกให้ยุ่งยาก

โครงสร้างพื้นฐานของคำสั่ง CREATE TRIGGER

SQL
CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
  -- คำสั่ง SQL ที่ต้องการให้ทำงานอัตโนมัติ
END;
ส่วนของคำสั่งความหมาย
CREATE TRIGGERสร้าง Trigger
trigger_nameตั้งชื่อ Trigger
BEFORE หรือ AFTERจะให้ทำงาน “ก่อน” หรือ “หลัง” เหตุการณ์เกิดขึ้น
INSERT, UPDATE, DELETEเหตุการณ์ที่ต้องการดักจับ
ON table_nameตารางที่ต้องการให้ Trigger เฝ้าดู
FOR EACH ROWทำงานกับทุกแถวที่ได้รับผลกระทบ
NEW, OLDใช้เข้าถึงค่าข้อมูลที่เพิ่งถูก INSERT (NEW) หรือ ก่อน/หลังถูก UPDATE, DELETE (OLD)

ตัวอย่างการใช้งาน

บันทึกการเพิ่มลูกค้าใหม่ลงใน log

สมมติว่าเรามีตาราง customers และ customer_log

เมื่อมีการเพิ่มข้อมูลลงใน customers, ให้ระบบบันทึกข้อความว่า “เพิ่มลูกค้า: [ชื่อ]” ลงในตาราง customer_log

สร้าง Trigger

SQL
DELIMITER //

CREATE TRIGGER after_customer_insert
AFTER INSERT ON customers            -- ทำงานหลังจากมีการ INSERT ลงตาราง customers
FOR EACH ROW                         -- ทำงานกับทุกแถวที่ถูกเพิ่ม
BEGIN
  -- แทรกข้อความ log ลงในตาราง customer_log
  INSERT INTO customer_log(message, log_time)
  VALUES (
    CONCAT('เพิ่มลูกค้า: ', NEW.name),  -- ใช้ค่า NEW.name คือชื่อที่เพิ่งถูกเพิ่มเข้ามา
    NOW()                                 -- บันทึกเวลาปัจจุบัน
  );
END //

DELIMITER ;

ทดสอบใช้งาน Trigger

SQL
INSERT INTO customers(name, email)
VALUES ('กาญจนา', '[email protected]');

ผลลัพธ์

idmessagelog_time
1เพิ่มลูกค้า: กาญจนา2024-04-12 14:30:00

ข้อควรระวังในการใช้งาน Trigger

  • MySQL ไม่รองรับ Trigger ซ้อนกันหลายชั้น (Nested)
  • อย่าทำให้ Trigger ทำงานหนักเกินไป เช่น query ซับซ้อนหรือวนลูป
  • หลีกเลี่ยง UPDATE ตารางเดียวกันใน Trigger เดียวกัน (อาจเกิด loop infinity)
  • หากต้องการใช้กับหลายตาราง ควรแยก Trigger แต่ละตารางอย่างชัดเจน
แชร์เรื่องนี้