เมื่อไหร่ต้องใช้ Backticks (`) ใน MySQL
Backticks (`) จำเป็นต้องใช้เมื่อชื่อตารางหรือคอลัมน์เป็น Reserved Words (คำสงวน) หรือมีอักขระพิเศษ/ช่องว่าง
ไวยากรณ์
SELECT * FROM `table` WHERE `where` = condition;
ตัวอย่าง: ไม่ใช้ Backticks (Error)
mysql> CREATE TABLE table (where INT);
ERROR 1064 (42000): You have an error in your SQL syntax...
near 'table ( where int )' at line 1
ตัวอย่าง: ใช้ Backticks (Success)
mysql> CREATE TABLE `table` (`where` INT);
Query OK, 0 rows affected (0.55 sec)
mysql> INSERT INTO `table`(`where`) VALUES(1), (100), (1000);
Query OK, 3 rows affected
mysql> SELECT * FROM `table` WHERE `where` = 100;
+-------+
| where |
+-------+
| 100 |
+-------+
คำสงวนที่พบบ่อย (Common Reserved Words)
| กลุ่ม | ตัวอย่าง |
|---|---|
| SQL Commands | SELECT, INSERT, UPDATE, DELETE, WHERE, FROM, JOIN, GROUP, ORDER, BY, LIMIT |
| Data Types | INT, VARCHAR, TEXT, DATE, TIME, TIMESTAMP, DECIMAL |
| Constraints | PRIMARY, KEY, FOREIGN, REFERENCES, UNIQUE, CHECK, DEFAULT, NULL, NOT |
| Functions | COUNT, SUM, AVG, MIN, MAX, NOW, DATE, UPPER, LOWER |
| Others | TABLE, DATABASE, INDEX, VIEW, TRIGGER, PROCEDURE, FUNCTION, USER, PASSWORD |
แนวทางปฏิบัติที่ดี (Best Practices)
- หลีกเลี่ยงคำสงวน - ตั้งชื่อไม่ให้ชน (เช่นใช้
user_tableแทนuser,sort_orderแทนorder) - ใช้ Backticks ทุกครั้ง - ป้องกันปัญหาในอนาคตหากคำสงวนเพิ่มขึ้นใน version ใหม่
- เครื่องมือ ORM/Query Builder - ส่วนใหญ่จะเพิ่ม backticks ให้อัตโนมัติ
การตั้งค่า SQL Mode
โหมด ANSI_QUOTES ทำให้ double quotes (") ทำงานเหมือน backticks:
SET SQL_MODE = 'ANSI_QUOTES';
SELECT * FROM "table" WHERE "where" = 100; -- ทำงานได้
แต่ในโหมดนี้ single quotes (') เท่านั้นที่ใช้สำหรับ string literals
สรุป
- ไม่จำเป็นต้องใช้เสมอไป - เฉพาะกรณีชนคำสงวนหรือมีอักขระพิเศษ
- แนะนำให้ใช้เป็นนิสัย (defensive programming)
- Backticks เป็น MySQL-specific, ฐานข้อมูลอื่นใช้ double quotes (PostgreSQL, SQL Server, Oracle)