RANK là từ khóa reserved word từ MySQL 8.0.2 (dùng cho window function RANK()). Không thể dùng làm tên cột/bảng trừ khi bao quanh bằng backticks.
Kiểm tra phiên bản MySQL
SELECT VERSION(); -- 8.0.12 (ví dụ)
❌ Sai (lỗi cú pháp)
CREATE TABLE DemoTable1596 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20),
rank INT
);
ERROR 1064 (42000): syntax error near 'rank int'
✅ Đúng (dùng backticks)
CREATE TABLE DemoTable1596 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20),
`rank` INT
);
Chèn và truy vấn (cần backticks khi tham chiếu):
INSERT INTO DemoTable1596 (StudentName, `rank`) VALUES ('Bob', 4567), ('David', 1);
SELECT Id, StudentName, `rank` FROM DemoTable1596;
Kết quả
| Id | StudentName | rank |
|---|---|---|
| 1 | Bob | 4567 |
| 2 | David | 1 |
Danh sách từ khóa reserved mới MySQL 8.0 (một phần)
RANK,DENSE_RANK,ROW_NUMBER,LEAD,LAG,FIRST_VALUE,LAST_VALUE,NTILE,CUME_DIST,PERCENT_RANK(Window functions)GROUPS,RANGE,ROWS(Frame clauses)LATERAL,RECURSIVE(CTE)FUNCTION,PROCEDURE(nâng cao)
Khuyến nghị
- Tránh dùng từ khóa reserved làm identifier.
- Naming convention:
ranking,rank_value,student_rank. - Nếu migration từ phiên bản cũ: tìm và rename cột/bảng trùng từ khóa mới.
- Luôn dùng backticks quanh identifier trong code SQL động / ORM.