ถ้าชื่อคอลัมน์มีอักขระพิเศษ เช่น จุด (.) ต้องใช้ backticks (`) ครอบชื่อคอลัมน์
สร้างตารางที่มีคอลัมน์ชื่อ `User.FirstName.LastName`
mysql> CREATE TABLE UpdateDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `User.FirstName.LastName` VARCHAR(60)
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO UpdateDemo(`User.FirstName.LastName`) VALUES
('John Smith'), ('Adam Smith'), ('Carol Taylor'), ('Mitchell Johnson'), ('David Brown'), ('Larry Miller');
แสดงข้อมูลก่อน
mysql> SELECT * FROM UpdateDemo;
ผลลัพธ์:
+--------+-------------------------+ | UserId | User.FirstName.LastName | +--------+-------------------------+ | 1 | John Smith | | 2 | Adam Smith | | 3 | Carol Taylor | | 4 | Mitchell Johnson | | 5 | David Brown | | 6 | Larry Miller | +--------+-------------------------+
UPDATE ใช้ backticks ครอบชื่อคอลัมน์
mysql> UPDATE UpdateDemo
-> SET `User.FirstName.LastName` = 'David Miller'
-> WHERE UserId = 5;
Query OK, 1 row affected (0.19 sec)
ตรวจสอบหลังอัปเดต (แถวที่ 5 เปลี่ยนเป็น David Miller)
mysql> SELECT * FROM UpdateDemo;
ผลลัพธ์:
+--------+-------------------------+ | UserId | User.FirstName.LastName | +--------+-------------------------+ | 1 | John Smith | | 2 | Adam Smith | | 3 | Carol Taylor | | 4 | Mitchell Johnson | | 5 | David Miller | | 6 | Larry Miller | +--------+-------------------------+
เมื่อไหร่ต้องใช้ Backticks?
- ชื่อคอลัมน์/ตารางมีช่องว่าง:
`first name` - ชื่อคอลัมน์/ตารางมีจุด:
`user.name` - ชื่อคอลัมน์/ตารางเป็น Reserved Word:
`select`,`order`,`group` - ชื่อคอลัมน์/ตารางขึ้นต้นด้วยตัวเลข:
`123column` - มีอักขระพิเศษอื่นๆ:
-,#,@,$เป็นต้น
แนวทางปฏิบัติที่ดี (Best Practice)
- หลีกเลี่ยง การตั้งชื่อที่ต้องใช้ backticks
- ใช้
snake_case:user_first_name_last_name - ใช้
camelCase:userFirstNameLastName - ตั้งชื่อสื่อความหมาย ไม่ใช่ชื่อยาวผสมจุด
ในโปรแกรม (Java, Python, etc.)
Backticks เป็นส่วนของ SQL string ต้อง escape ตามภาษา:
- Java:
\"`User.FirstName.LastName`\" - Python:
\"`User.FirstName.LastName`\"หรือ''`User.FirstName.LastName`''