Trigger (ทริกเกอร์) คือคำสั่ง SQL ชุดหนึ่งที่ถูกเรียกใช้อัตโนมัติเมื่อมีการกระทำบางอย่าง (event) เกิดขึ้นกับตารางในฐานข้อมูล เช่น การ INSERT, UPDATE หรือ DELETE แถวข้อมูล
ต่างจาก Stored Procedure ที่ต้องเรียกใช้ด้วย CALL แต่ Trigger จะทำงานเองอัตโนมัติโดยไม่ต้องเรียก
สรุปง่าย ๆ ว่า Trigger คือระบบเฝ้าดูการเปลี่ยนแปลงของข้อมูลในตาราง
ประเภทของ Trigger
Trigger ใน MySQL แบ่งออกเป็น 6 แบบตามเหตุการณ์และเวลาที่ทำงาน
| Trigger Type | ทำงานเมื่อ… |
|---|---|
BEFORE INSERT | ก่อนเพิ่มข้อมูลใหม่ลงตาราง |
AFTER INSERT | หลังเพิ่มข้อมูลใหม่ลงตาราง |
BEFORE UPDATE | ก่อนอัปเดตข้อมูล |
AFTER UPDATE | หลังอัปเดตข้อมูล |
BEFORE DELETE | ก่อนลบข้อมูล |
AFTER DELETE | หลังลบข้อมูล |
Trigger ใช้ทำอะไรได้บ้างในระบบฐานข้อมูล?
Trigger สามารถประยุกต์ใช้ได้หลากหลาย เช่น
- อัปเดตตารางอื่นอัตโนมัติ
- เช่น เมื่อมีการขายสินค้า Trigger จะหักจำนวน stock ทันที
- สร้าง log หรือ audit trail
- บันทึกว่าใครแก้ไขอะไรไว้ในอีกตาราง เช่น
log_table
- บันทึกว่าใครแก้ไขอะไรไว้ในอีกตาราง เช่น
- ป้องกันข้อมูลผิดเงื่อนไข
- เช่น ไม่อนุญาตให้ลบผู้ใช้ระดับ
admin
- เช่น ไม่อนุญาตให้ลบผู้ใช้ระดับ
- เติมข้อมูลอัตโนมัติ (auto calculate)
- เช่น คำนวณภาษี, คำนวณยอดรวม, หรือสร้าง slug อัตโนมัติ
- เพิ่มความปลอดภัยของข้อมูล
- เช่น ตรวจสอบก่อนลบ หรือย้อนกลับการเปลี่ยนแปลงหากผิดเงื่อนไข
ตัวอย่างการใช้งาน Trigger
Trigger บันทึกการเพิ่มลูกค้าใหม่
SQL
CREATE TRIGGER log_new_customer
AFTER INSERT ON customers
FOR EACH ROW
INSERT INTO customer_log(message, log_time)
VALUES (CONCAT('Add: ', NEW.name), NOW());- คำสั่งนี้จะทำงานทันทีหลังจากมีการเพิ่มลูกค้าใหม่เข้ามาใน
customers - ระบบจะบันทึกชื่อผู้ที่ถูกเพิ่มลงใน
customer_logพร้อมเวลาปัจจุบัน
สิ่งที่ Trigger ไม่สามารถทำได้
- ไม่สามารถใช้ คำสั่ง
COMMITหรือROLLBACKภายใน Trigger - ไม่สามารถ เรียก Trigger ซ้อนกันได้หลายระดับ
- ไม่เหมาะกับการทำงานที่ต้องมี UI หรือตอบกลับผู้ใช้โดยตรง