การใช้คำสงวนเป็นชื่อตาราง/คอลัมน์ ต้องใช้ Backtick
name ไม่ใช่คำสงวน (Reserved Word) ใน MySQL สามารถใช้เป็นชื่อตาราง/คอลัมน์ได้โดยไม่ต้องใช้ backtick (`) แต่คำสงวนอื่นๆ เช่น SELECT, ORDER, GROUP, INDEX ต้องใช้ backtick ครอบ
ตัวอย่าง: ใช้ name เป็นชื่อตารางและคอลัมน์ (ไม่ต้อง backtick)
CREATE TABLE name (name VARCHAR(10));
INSERT INTO name VALUES ('John'), ('Carol');
SELECT * FROM name;
+-------+ | name | +-------+ | John | | Carol | +-------+
ตัวอย่าง: ใช้คำสงวน SELECT เป็นชื่อตารางและคอลัมน์ (ต้อง backtick)
CREATE TABLE `select` (`select` INT); INSERT INTO `select` VALUES (1); SELECT `select` FROM `select`;
+--------+ | select | +--------+ | 1 | +--------+
คำอธิบาย: Backtick (`) ใช้ Escape Identifier ให้ MySQL รู้ว่านี่คือชื่อตัวระบุ (Identifier) ไม่ใช่คำสั่ง SQL
แนวทางปฏิบัติที่ดี (Best Practice):
- ใช้ backtick ครอบชื่อตารางและคอลัมน์ทุกครั้ง ป้องกันปัญหาคำสงวนทั้งที่รู้และไม่รู้ รวมถึงชื่อที่มีช่องว่าง/อักขระพิเศษ
- หลีกเลี่ยงใช้คำสงวนเป็น Identifier
- ดูรายการคำสงวนเต็มได้ที่:
SHOW KEYWORDSหรือเอกสาร MySQL Reserved Words
คำสงวนที่พบบ่อยและควรระวัง: ORDER, GROUP, INDEX, KEY, PRIMARY, UNIQUE, FOREIGN, REFERENCES, CHECK, CONSTRAINT, TRIGGER, PROCEDURE, FUNCTION, VIEW, DATABASE, TABLE, COLUMN, SELECT, INSERT, UPDATE, DELETE, WHERE, JOIN, LEFT, RIGHT, INNER, OUTER, UNION, LIMIT, OFFSET, DESC, ASC, LIKE, IN, BETWEEN, CASE, WHEN, THEN, ELSE, END, IF, NULL, TRUE, FALSE, AND, OR, NOT, IS, DISTINCT, EXISTS, ALL, ANY, SOME