บทบาทของ DELIMITER ใน Trigger และ Stored Procedure
คำสั่ง DELIMITER // ใช้เปลี่ยนตัวคั่นคำสั่ง SQL จากจุดท้าย (;) เป็น // ชั่วคราว เพื่อให้สามารถเขียนคำสั่งหลายคำสั่ง (ที่มี ; ภายใน) ภายใน Trigger หรือ Stored Procedure ได้
ตัวอย่าง Trigger ใช้ DELIMITER
1. สร้างตารางพนักงาน
CREATE TABLE EmployeeTable (
EmployeeId INT,
EmployeeName VARCHAR(100),
EmployeeSalary FLOAT
);
2. สร้าง Trigger ก่อน Insert (BEFORE INSERT)
DELIMITER //
CREATE TRIGGER CheckSalary
BEFORE INSERT ON EmployeeTable
FOR EACH ROW
BEGIN
IF NEW.EmployeeSalary < 1000 THEN
SET NEW.EmployeeSalary = 10000;
END IF;
END //
DELIMITER ;
การทดสอบ Trigger
กรณีที่ 1: เงินเดือนต่ำกว่า 1000 (จะถูกตั้งค่าเป็น 10000)
INSERT INTO EmployeeTable VALUES (1, 'Carol', 500);
SELECT * FROM EmployeeTable;
| EmployeeId | EmployeeName | EmployeeSalary |
| 1 | Carol | 10000 |
กรณีที่ 2: เงินเดือน 1000 หรือมากกว่า (คงค่าเดิม)
TRUNCATE TABLE EmployeeTable;
INSERT INTO EmployeeTable VALUES (2, 'Bob', 1000), (3, 'Carol', 2500);
SELECT * FROM EmployeeTable;
| EmployeeId | EmployeeName | EmployeeSalary |
| 2 | Bob | 1000 |
| 3 | Carol | 2500 |
จุดสำคัญ
DELIMITER // ต้องอยู่ ก่อน CREATE TRIGGER
END // ใช้ปิด Trigger แทน END;
DELIMITER ; ต้องคืนค่ากลับหลังสร้างเสร็จ
- ใช้ได้กับ Stored Procedure, Function, Event เช่นกัน
- ใน MySQL Workbench / phpMyAdmin มักมีการตั้งค่า Delimiter แยกต่างหาก