คำสงวนคือคำที่เป็น keyword ของ MySQL เช่น ชื่อฟังก์ชัน จะไม่สามารถกำหนดเป็นชื่อ table หรือชื่อ field ได้ และจะเกิด error ขึ้นถ้าเรากำหนดให้มัน ผมจะยกตัวอย่างคำสั่งนี้ให้ดูนะครับ ซึ่งมันจะเกิด error เนื่องจากว่าเป็นการกำหนดชื่อ field เป็น "order" ซึ่งเป็นคำสงวนใน MySQL (เป็นคำสงวนที่ใช้ในส่วนของ ORDER BY)
CREATE TABLE t ( order INT NOT NULL UNIQUE, d DATE NOT NULL ); # ผลลัพธ์ ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'order INT NOT NULL UNIQUE, d Date NOT NULL)' at line 1
คำสั่งต่อไปนี้ก็จะ error เช่นกัน เนื่องจากเรากำหนดชื่อ alias ให้กับ column เป็นคำสงวน
SELECT 1 AS INTEGER; # ผลลัพธ์ ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTEGER' at line 1
เราสามารถแก้ปัญหาเหล่านี้ได้ (ในกรณีที่ต้องการใช้คำสงวนในการกำหนดชื่อต่าง ๆ) เราจะต้องใส่ quote ให้กับมัน โดยขึ้นอยู่กับชนิดของชื่อต่าง ๆ นั้นเช่น
ถ้าใช้คำสงวนเป็นชื่อ database, table, field หรือ index จะมีวิธีการ quote อยู่ 2 แบบ ขึ้นอยู่กับ mode ที่ server กำลังทำงานอยู่ โดย default การ quote คำสงวนภายใน backtick(`) จะอนุญาติให้เรากำหนดชื่อเป็นคำสงวนได้
CREATE TABLE t ( `order` INT NOT NULL UNIQUE, d DATE NOT NULL ); # ผลลัพธ์ Query OK, 0 rows affected (0.00 sec)
ถ้า server ถูก start ด้วย --ansi หรือ --sql-mode=ANSI_QUOTES มันจะอนุญาติให้เรา quote โดยการใช้ double quote ได้
CREATE TABLE t ( "order" INT NOT NULL UNIQUE, d DATE NOT NULL ); # ผลลัพธ์ Query OK, 0 rows affected (0.00 sec)
การใช้คำสงวนเป็นชื่อ alias นั้น เราสามารถ quote ได้ทั้งแบบ single quotes และ double quotes หรือ backticks ก็ได้ เช่นต้องการกำหนด alias เป็น INTEGER เราสามารถเขียนได้ดังนี้
# แบบ single quote SELECT 1 AS 'INTEGER'; # แบบ double quote SELECT 1 AS "INTEGER"; # แบบ backtick SELECT 1 AS `INTEGER`;
ผู้สนับสนุน