Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Khắc phục lỗi cú pháp ORDER BY `order` DESC trong MySQL?

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óaVí dụ dùng saiSửa
ORDERORDER BY orderORDER BY \`order\`
GROUPGROUP BY groupGROUP BY \`group\`
BYORDER BY byORDER BY \`by\`
KEYWHERE key = 1WHERE \`key\` = 1
INDEXCREATE INDEX indexCREATE INDEX \`index\`
SELECTSELECT selectSELECT \`select\`
WHEREWHERE where = 1WHERE \`where\` = 1
TABLECREATE TABLE tableCREATE TABLE \`table\`
COLUMNALTER TABLE columnALTER TABLE \`column\`
DATABASECREATE DATABASE databaseCREATE DATABASE \`database\`

Best Practice

  1. Luôn dùng backtick cho mọi identifier: \`table\`, \`column\`, \`index\`
  2. Tránh tên trùng từ khóa SQL
  3. Naming convention: sort_order, display_order, sort_key thay vì order
  4. 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;