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

แก้ไข Error ใช้ Reserved Word เป็นชื่อตาราง/คอลัมน์ใน MySQL ใช้ Backtick


ปัญหา: Reserved Keywords

MySQL มีคำสงวน (Reserved Words) ที่ใช้เป็นคำสั่ง SQL หากใช้เป็นชื่อตาราง/คอลัมน์จะเกิด Syntax Error:

กรณีที่ 1: ชื่อตารางเป็น Reserved Word

CREATE TABLE insert (Id INT);
-- ERROR 1064 (42000): syntax error near 'insert ( Id int )'

กรณีที่ 2: ชื่อคอลัมน์เป็น Reserved Word

CREATE TABLE Customers (Add INT);
-- ERROR 1064 (42000): syntax error near 'Add int )'

วิธีแก้: ใช้ Backtick (`)

ห่อชื่อ Identifier ด้วย Backtick (`) เพื่อบอก MySQL ว่าเป็น Identifier ไม่ใช่ Keyword:

CREATE TABLE `insert` (`Add` INT);
-- สำเร็จ!

Reserved Words ตัวอย่างที่พบบ่อย

คำสงวน ประเภท
SELECT, INSERT, UPDATE, DELETE DML Commands
CREATE, DROP, ALTER, TRUNCATE DDL Commands
WHERE, FROM, JOIN, GROUP, ORDER, BY Clauses
INDEX, KEY, PRIMARY, UNIQUE, FOREIGN Constraints
INT, VARCHAR, DATE, TIMESTAMP Data Types
USER, GROUP, ORDER, TABLE, DATABASE Objects
ADD, DROP, CHANGE, MODIFY, RENAME ALTER Actions
DESC, ASC, LIMIT, OFFSET Query Modifiers
AND, OR, NOT, LIKE, IN, BETWEEN Operators
NULL, TRUE, FALSE, DEFAULT Literals
CURRENT_TIMESTAMP, NOW, CURDATE Functions

ดูรายการ Reserved Words ครบถ้วน

MySQL Official Documentation: https://dev.mysql.com/doc/refman/8.0/en/keywords.html

Best Practices

  1. หลีกเลี่ยง ใช้ Reserved Words เป็น Identifier
  2. Prefix/Suffix: ใช้ user_table, order_date, group_id
  3. Backtick ทุกที่: เขียน Query ให้มี Backtick ครอบ Identifier เสมอ SELECT `id` FROM `table` WHERE `name` = 'x'
  4. Naming Convention: snake_case, คำนามบ่งบอกความหมาย (ไม่ใช่คำสั่ง)

ตัวอย่างที่ถูกต้อง

CREATE TABLE `order` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT,
    `order_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `status` VARCHAR(20) DEFAULT 'pending',
    `key` VARCHAR(50),          -- key เป็น reserved
    `index` INT,                -- index เป็น reserved
    `group` VARCHAR(100)        -- group เป็น reserved
);

สรุป: ใช้ Backtick (`) ครอบชื่อตาราง/คอลัมน์เสมอ จะป้องกัน Error จาก Reserved Words ได้หมด