MySQL การจัดการ Trigger ลบ Trigger และตรวจสอบ Trigger

ในบทความนี้ เราจะมาเรียนรู้การ ลบ Trigger ที่ไม่ใช้แล้ว, ตรวจสอบ Trigger ที่มีอยู่ทั้งหมดในระบบ, และ แนวทางจัดการ Trigger อย่างมืออาชีพ กันครับ

วิธีลบ Trigger ที่ไม่ใช้งาน

หากต้องการลบ Trigger ที่เคยสร้างไว้ สามารถใช้คำสั่งนี้

รูปแบบคำสั่ง

DROP TRIGGER [IF EXISTS] trigger_name;

ตัวอย่าง

SQL
DROP TRIGGER IF EXISTS after_customer_insert;
  • ใช้ IF EXISTS เพื่อป้องกัน error หาก Trigger นั้นไม่มีอยู่จริง

การดูรายการ Trigger ที่มีอยู่ทั้งหมด

คำสั่งสำรวจ Trigger

SQL
SHOW TRIGGERS;

ผลลัพธ์ที่ได้จะมีข้อมูลดังนี้

  • Trigger คือชื่อ Trigger
  • Event คือประเภท (INSERT, UPDATE, DELETE)
  • Table คือตารางที่ใช้
  • Statement คือคำสั่งที่ Trigger ทำ
  • Timing คือ BEFORE หรือ AFTER
  • Created คือวันเวลาที่สร้าง
Trigger Event Table Timing
after_customer_insert INSERT customers AFTER
after_customer_update_status_log UPDATE customers AFTER

แสดง Trigger ของฐานข้อมูล

สามารถใช้คำสั่งดังนี้ในระบบขนาดใหญ่ เพื่อตรวจสอบ Trigger ทั้งหมดตามชื่อฐานข้อมูลได้

SQL
SELECT TRIGGER_NAME, EVENT_OBJECT_TABLE, EVENT_MANIPULATION, ACTION_TIMING
FROM information_schema.TRIGGERS
WHERE TRIGGER_SCHEMA = 'your_database_name';

แนวทางในการจัดการ Trigger

สำหรับแนวทางในการจัดการกับ Trigger ที่แนะนำมีดังนี้ครับ

แนวทาง (Best Practice) คำอธิบาย
ตั้งชื่อ Trigger ให้สื่อความหมายชัดเจน ใช้รูปแบบเช่น after_order_insert_log หรือ before_user_delete_block เพื่อให้รู้ว่า Trigger นี้ทำงานเมื่อใดและกับอะไร
อย่าเขียน Logic ซับซ้อนเกินไป Trigger ควรทำงานเร็วและเบา ดังนั้นจึงควรหลีกเลี่ยงการใช้คำสั่ง JOIN, LOOP หรือ CURSOR ภายใน Trigger
สำรอง Trigger ด้วย mysqldump --routines เพื่อให้สามารถ Backup และ Restore Trigger ได้ง่ายในกรณีระบบมีปัญหา
ตรวจสอบ Trigger เป็นประจำด้วย SHOW TRIGGERS ช่วยให้เรารู้ว่า Trigger ไหนยังใช้งานอยู่ หรือมี Trigger ที่ลืมลบค้างอยู่หรือไม่
แยก Trigger เป็นไฟล์ .sql ใช้ไฟล์แยกสำหรับจัดเก็บ Trigger แต่ละตัว เพื่อความเป็นระเบียบ และสะดวกในการ deploy หรือ version control
ใช้ IF ตรวจสอบก่อนทำงาน เช่น ตรวจว่า OLD.value <> NEW.value ก่อน INSERT log เพื่อไม่ให้บันทึกซ้ำโดยไม่จำเป็น
แชร์เรื่องนี้