คำสั่ง DELIMITER ใช้เปลี่ยนสัญลักษณ์จบคำสั่ง SQL จากค่าเริ่มต้น ; (Semicolon) เป็นสัญลักษณ์อื่น เพื่อใช้ในการเขียน Stored Procedure, Trigger, Function ที่มีหลายคำสั่งภายใน
ไวยากรณ์
DELIMITER anySymbol
ตัวอย่างการใช้งาน
1. เปลี่ยน Delimiter เป็น //
mysql> DELIMITER //
2. สร้างตารางด้วย Delimiter ใหม่
mysql> CREATE TABLE DemoTable (
Id INT,
Name VARCHAR(20)
)//
Query OK, 0 rows affected (0.52 sec)
3. เพิ่มข้อมูลด้วย Delimiter ใหม่
mysql> INSERT INTO DemoTable VALUES(100, 'Chris')// Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO DemoTable VALUES(101, 'David')// Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable VALUES(102, 'Bob')// Query OK, 1 row affected (1.07 sec)
4. Query ข้อมูลด้วย Delimiter ใหม่
mysql> SELECT * FROM DemoTable // +------+-------+ | Id | Name | +------+-------+ | 100 | Chris | | 101 | David | | 102 | Bob | +------+-------+ 3 rows in set (0.00 sec)
5. กลับไปใช้ Delimiter ปกติ (;)
mysql> DELIMITER ;
เมื่อไหร่ต้องเปลี่ยน Delimiter?
- เขียน Stored Procedure ที่มีหลายคำสั่ง SQL ภายใน (BEGIN ... END)
- เขียน Trigger หรือ Function
- รัน Script ที่มีหลาย Statement ติดกันและต้องการส่งไปรันทีเดียว
ตัวอย่าง Stored Procedure ต้องใช้ DELIMITER
DELIMITER //
CREATE PROCEDURE my_proc()
BEGIN
SELECT 1; -- ต้องมี ; ภายใน
SELECT 2; -- ต้องมี ; ภายใน
END //
DELIMITER ;
สัญลักษณ์ที่นิยมใช้
//(Double slash) - นิยมมากที่สุด$$(Dollar signs)@@(At signs)|(Pipe)
สรุป
DELIMITER เปลี่ยนตัวจบคำสั่งชั่วคราวใน Session ปัจจุบัน ใช้ // เป็นมาตรฐาน สำคัญคือต้องเปลี่ยนกลับเป็น ; หลังจบการกำหนด Procedure/Trigger มิฉะนั้นคำสั่งปกติจะรันไม่ได้