ปัญหา: groups เป็น Reserved Keyword
MySQL จำกัดคำสงวน (Reserved Keywords) ไม่ให้ใช้เป็นชื่อตาราง/คอลัมน์โดยตรง
Error ที่เกิดขึ้น
mysql> CREATE TABLE groups (id INT, name VARCHAR(40)); ERROR 1064 (42000): You have an error in your SQL syntax... near 'groups (id int, name varchar(40))' at line 1
วิธีแก้: ใช้ Backticks (` `)
CREATE TABLE `groups` (
id INT,
name VARCHAR(40)
);
การใช้งานต่อไปต้องใช้ Backticks เสมอ
INSERT INTO `groups` VALUES (10, 'John'), (11, 'Bob'), (12, 'Mike'); SELECT * FROM `groups`;
ผลลัพธ์
+------+------+ | id | name | +------+------+ | 10 | John | | 11 | Bob | | 12 | Mike | +------+------+
Reserved Keywords ที่พบบ่อย
| คำสงวน | ความหมาย | ตัวเลือกแทน |
|---|---|---|
| GROUP | GROUP BY | grp, team, category |
| ORDER | ORDER BY | ord, sort_order |
| INDEX | CREATE INDEX | idx, index_name |
| KEY | PRIMARY KEY | key_id, pk |
| REFERENCES | FK constraint | ref, fk_ref |
| TABLE | CREATE TABLE | tbl, table_name |
| USER | CREATE USER | usr, app_user |
| DATABASE | CREATE DATABASE | db, schema_name |
| SELECT, INSERT, UPDATE, DELETE | DML commands | หลีกเลี่ยงใช้เป็น identifier |
Best Practice: หลีกเลี่ยง Reserved Keywords ทั้งหมด
- ตั้งชื่อเป็นภาษาอังกฤษที่อธิบายความหมายชัดเจน:
user_groups,order_items,index_config - ใช้ Prefix:
tbl_groups,col_order - ใช้เครื่องมือตรวจสอบ:
SHOW KEYWORDSหรือดู MySQL Keywords Reference
แสดงคำสงวนทั้งหมด
SHOW KEYWORDS;
หรือ query จาก INFORMATION_SCHEMA (MySQL 8.0+):
SELECT * FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;
ตัวอย่างอื่น: คอลัมน์ชื่อ order
CREATE TABLE orders (
id INT PRIMARY KEY,
`order` INT, -- ต้องใช้ backticks
amount DECIMAL(10,2)
);