การใช้ Backticks (`) ใน SET clause ของ UPDATE ให้ถูกต้อง
Backticks ใช้ escape identifier (ชื่อตาราง, คอลัมน์) ที่เป็น reserved word หรือมี special characters ใน SET clause ต้องระบุ table.column ให้ครบ
ไวยากรณ์ที่ถูกต้อง
UPDATE `table_name`
SET `table_name`.`column_name` = 'new_value'
WHERE condition;
สร้างตารางชื่อมี underscore (ต้องใช้ backticks)
mysql> create table `DemoTable_1401` (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)
mysql> insert into `DemoTable_1401` values('Chris');
mysql> insert into `DemoTable_1401` values('David');
mysql> insert into `DemoTable_1401` values('Bob');
ข้อมูลก่อน UPDATE
+-------+ | Name | +-------+ | Chris | | David | | Bob | +-------+
คำสั่ง UPDATE ด้วย Backticks ให้ถูกต้อง
mysql> update `DemoTable_1401`
-> set `DemoTable_1401`.`Name` = 'Adam'
-> where `Name` = 'David';
Query OK, 1 row affected (0.15 sec)
ข้อมูลหลัง UPDATE
+-------+ | Name | +-------+ | Chris | | Adam | | Bob | +-------+
เมื่อไหร่ต้องใช้ Backticks
- ชื่อตาราง/คอลัมน์เป็น reserved word:
SELECT `select`, `from`, `where` FROM `table` - มี space, hyphen, special chars:
`my-table`, `col-name` - ขึ้นต้นด้วยตัวเลข:
`123col` - Case-sensitive identifier (บน OS case-sensitive)
ข้อผิดพลาดทั่วไป
-- ผิด: ไม่ระบุ table name ใน SET
UPDATE `t` SET `col` = 'x' WHERE ...; -- OK จริงๆ ถ้าไม่ ambiguous
-- ผิด: backticks ครอบทั้ง expression
UPDATE `t` SET `col + 1` = 10; -- ERROR: `col + 1` ไม่ใช่ identifier
-- ถูก: backticks เฉพาะ identifier
UPDATE `t` SET `col` = `col` + 1;
ANSI SQL Mode: ใช้ Double Quotes แทน
SET sql_mode = 'ANSI_QUOTES';
UPDATE "table" SET "col" = 'value' WHERE ...;
ในโหมดนี้ Double quotes ใช้สำหรับ identifier, Single quotes สำหรับ string literal
Best Practice: ใช้ backticks ทุกครั้งใน SQL ที่ generate โดยโปรแกรม (ORM, query builder) เพื่อความปลอดภัย สำหรับเขียนมือ ใช้เมื่อจำเป็น