Nguyên nhân
ORDER là từ khóa dành riêng (reserved word) trong MySQL. Dùng làm tên cột/bảng gây lỗi cú pháp.
Giải pháp: Backtick (` `)
Bọc tên định danh bằng backtick: \`order\`
Ví dụ minh họa
Tạo bảng cột tên `order`
mysql> CREATE TABLE DemoTable (
`order` INT
);
Chèn dữ liệu
mysql> INSERT INTO DemoTable VALUES(89), (67), (90), (56);
Truy vấn SAI (lỗi)
mysql> SELECT * FROM DemoTable ORDER BY order DESC; ERROR 1064 (42000): You have an error in your SQL syntax...
Truy vấn ĐÚNG (có backtick)
mysql> SELECT * FROM DemoTable ORDER BY `order` DESC;
Kết quả
+-------+ | order | +-------+ | 90 | | 89 | | 67 | | 56 | +-------+
Các từ khóa thường gây lỗi
| Từ khóa | Ví dụ dùng sai | Sửa |
|---|---|---|
| ORDER | ORDER BY order | ORDER BY \`order\` |
| GROUP | GROUP BY group | GROUP BY \`group\` |
| BY | ORDER BY by | ORDER BY \`by\` |
| KEY | WHERE key = 1 | WHERE \`key\` = 1 |
| INDEX | CREATE INDEX index | CREATE INDEX \`index\` |
| SELECT | SELECT select | SELECT \`select\` |
| WHERE | WHERE where = 1 | WHERE \`where\` = 1 |
| TABLE | CREATE TABLE table | CREATE TABLE \`table\` |
| COLUMN | ALTER TABLE column | ALTER TABLE \`column\` |
| DATABASE | CREATE DATABASE database | CREATE DATABASE \`database\` |
Best Practice
- Luôn dùng backtick cho mọi identifier:
\`table\`,\`column\`,\`index\` - Tránh tên trùng từ khóa SQL
- Naming convention:
sort_order,display_order,sort_keythay vìorder - IDE/Editor tốt sẽ highlight reserved words
Kiểm tra từ khóa dành riêng
SHOW KEYWORDS; -- Hoặc MySQL 8.0+ SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;