ควรเข้าใจข้อดี ข้อเสีย และข้อจำกัดของ Trigger เพื่อใช้งานได้อย่างมีประสิทธิภาพ
ข้อดี (Advantages)
- ความสมบูรณ์ของข้อมูล (Data Integrity) — Trigger ช่วยตรวจสอบความถูกต้องของข้อมูลในตาราง เป็นทางเลือกอื่นนอกเหนือจาก constraint
- จับข้อผิดพลาดทางธุรกิจ (Error Catching) — สามารถจับข้อผิดพลาดในชั้นฐานข้อมูลได้
- ทางเลือกสำหรับงานที่排程 (Scheduled Tasks) — Trigger ทำงานอัตโนมัติก่อน/หลังการเปลี่ยนแปลงข้อมูล ไม่ต้องรอ排程
- ตรวจสอบการเปลี่ยนแปลง (Auditing) — เหมาะสำหรับบันทึกประวัติการเปลี่ยนแปลงตาราง
- ป้องกันธุรกรรมที่ไม่ถูกต้อง (Invalid Transaction Prevention) — สามารถปฏิเสธการดำเนินการที่ผิดกฎได้
- บันทึกเหตุการณ์ (Event Logging) — บันทึกการเข้าถึงตารางหรือเหตุการณ์ต่างๆ
ข้อเสีย (Disadvantages)
- ไม่แทนที่การตรวจสอบทั้งหมดได้ — ให้เพียงการตรวจสอบเพิ่มเติม (extended validation) เท่านั้น
- ซ่อนอยู่จากแอปพลิเคชันไคลเอนต์ — ทำงานเบื้องหลัง ยากที่จะ debug หรือทราบว่าเกิดอะไรในชั้นฐานข้อมูล
- โหลดระบบเซิร์ฟเวอร์สูง — อาจทำให้เซิร์ฟเวอร์ทำงานหนักขึ้น
- ไม่เหมาะกับข้อมูลความเร็วสูง (High Velocity Data) — หากมี event จำนวนมากต่อวินาที Trigger จะถูกเรียกบ่อยเกินไป ส่งผลประสิทธิภาพ
ข้อจำกัด (Restrictions)
- Trigger เดียวต่อ timing/event — ตารางเดียวมี trigger ได้เพียงอันเดียวต่อแต่ละชุด timing/event (เช่น ไม่ได้มี BEFORE INSERT 2 ตัว)
- ห้ามใช้ RETURN — Trigger ไม่คืนค่า จึงไม่สามารถใช้ RETURN ได้
- ข้อจำกัด Foreign Key — Trigger ไม่ถูกเรียกโดยการกระทำของ foreign key
- ข้อมูลเมตาสลับเก่า (Outdated Metadata) — หาก trigger ถูกโหลดในแคชแล้ว metadata ตารางเปลี่ยน Trigger อาจทำงานด้วย metadata เก่า
- ห้ามใช้ CALL statement — ไม่สามารถใช้ CALL ใน trigger ได้
- ห้ามสร้าง TEMPORARY table หรือ VIEW — ไม่สามารถสร้างตารางชั่วคราวหรือ view ภายใน trigger
- ไม่ถูกกระตุ้นโดยการเปลี่ยนแปลง INFORMATION_SCHEMA — เพราะเป็น view และ trigger ไม่ได้อนุญาตบน view