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

MySQL: Backticks ใน SET clause ของ UPDATE ใช้ได้ถ้าเขียนถูกต้อง

การใช้ 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) เพื่อความปลอดภัย สำหรับเขียนมือ ใช้เมื่อจำเป็น