Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จำเป็นต้องใช้เครื่องหมายควอท (Backticks) รอบชื่อตารางและคอลัมน์ใน MySQL หรือไม่?

เมื่อไหร่ต้องใช้ 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 CommandsSELECT, INSERT, UPDATE, DELETE, WHERE, FROM, JOIN, GROUP, ORDER, BY, LIMIT
Data TypesINT, VARCHAR, TEXT, DATE, TIME, TIMESTAMP, DECIMAL
ConstraintsPRIMARY, KEY, FOREIGN, REFERENCES, UNIQUE, CHECK, DEFAULT, NULL, NOT
FunctionsCOUNT, SUM, AVG, MIN, MAX, NOW, DATE, UPPER, LOWER
OthersTABLE, DATABASE, INDEX, VIEW, TRIGGER, PROCEDURE, FUNCTION, USER, PASSWORD

แนวทางปฏิบัติที่ดี (Best Practices)

  1. หลีกเลี่ยงคำสงวน - ตั้งชื่อไม่ให้ชน (เช่นใช้ user_table แทน user, sort_order แทน order)
  2. ใช้ Backticks ทุกครั้ง - ป้องกันปัญหาในอนาคตหากคำสงวนเพิ่มขึ้นใน version ใหม่
  3. เครื่องมือ 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)