ในบทความนี้ เราจะมาเรียนรู้การ ลบ 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คือชื่อ TriggerEventคือประเภท (INSERT, UPDATE, DELETE)Tableคือตารางที่ใช้Statementคือคำสั่งที่ Trigger ทำTimingคือ BEFORE หรือ AFTERCreatedคือวันเวลาที่สร้าง
| 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 เพื่อไม่ให้บันทึกซ้ำโดยไม่จำเป็น |