สร้าง Trigger BEFORE INSERT เพื่อแปลงค่าเป็น Lowercase อัตโนมัติ
ใช้ BEFORE INSERT TRIGGER ร่วมกับฟังก์ชัน LOWER() เพื่อแปลงค่าที่จะ Insert ให้เป็นตัวพิมพ์เล็กก่อนบันทึกลงตาราง
ตัวอย่างสร้างตาราง
CREATE TABLE DemoTable (StudentSubject TEXT);
สร้าง Trigger
CREATE TRIGGER lowerCaseOnInsertDemo BEFORE INSERT ON DemoTable FOR EACH ROW SET NEW.StudentSubject = LOWER(NEW.StudentSubject);
ทดสอบ Insert ข้อมูลตัวพิมพ์ใหญ่/ผสม
INSERT INTO DemoTable VALUES ('MOngoDb'), ('JaVA'), ('MySqL');
ผลลัพธ์: เก็บเป็นตัวพิมพ์เล็กทั้งหมด
+----------------+ | StudentSubject | +----------------+ | mongodb | | java | | mysql | +----------------+
คำอธิบาย:
BEFORE INSERTทำงานก่อน Insert จริงFOR EACH ROWทำงานต่อแถวNEW.StudentSubjectอ้างถึงค่าใหม่ที่จะ Insert สามารถแก้ไขได้LOWER()แปลงสตริงเป็นตัวพิมพ์เล็กทั้งหมด
ขยายความสามารถ:
- เพิ่ม
BEFORE UPDATETrigger เหมือนกัน เพื่อครอบคลุมการ UPDATE ด้วย - ใช้
UPPER()สำหรับตัวพิมพ์ใหญ่ - ใช้
TRIM()ลบช่องว่างนำ/ท้าย
⚠ ข้อควรระวัง:
- Trigger เพิ่ม Overhead ต่อแต่ละ INSERT/UPDATE
- ควร Validate/Normalize ข้อมูลที่ Application Layer ก่อน ส่งมาแล้วถูกต้องดีกว่า
- MySQL Trigger ไม่รองรับ Transaction Rollback ภายใน Trigger (ถ้า Error จะ Rollback ทั้ง Statement)