Vấn đề
KEY là từ khóa dành riêng (reserved word) trong MySQL (dùng trong INDEX, PRIMARY KEY, FOREIGN KEY...). Nếu dùng làm tên cột/table trực tiếp sẽ báo lỗi cú pháp.
Giải pháp: Dùng backtick (`)
Bao quanh identifier bằng backtick để MySQL hiểu đây là tên định danh, không phải từ khóa.
Ví dụ minh họa
Tạo bảng với cột `Key`
mysql> CREATE TABLE DemoTable (
`Key` INT
);
Query OK, 0 rows affected (0.67 sec)
Chèn dữ liệu
mysql> INSERT INTO DemoTable VALUES (100), (101), (110), (120);
Truy vấn (cần backtick)
mysql> SELECT * FROM DemoTable;
+------+ | Key | +------+ | 100 | | 101 | | 110 | | 120 | +------+
mysql> SELECT `Key` FROM DemoTable WHERE `Key` > 100;
Các từ khóa thường gặp cần backtick
| Từ khóa | Ví dụ dùng làm tên cột |
|---|---|
| KEY | `Key` |
| INDEX | `Index` |
| ORDER | `Order` |
| GROUP | `Group` |
| SELECT | `Select` |
| WHERE | `Where` |
| TABLE | `Table` |
| DATABASE | `Database` |
| USER | `User` |
| PASSWORD | `Password` |
Khuyến nghị tốt nhất
- Luôn dùng backtick cho mọi identifier (table, column, index, alias...).
- Cấu hình
sql_mode=ANSI_QUOTEScho phép dùng double quote"thay backtick (chuẩn SQL), nhưng ít phổ biến trong MySQL. - Tránh đặt tên trùng từ khóa nếu có thể (đổi thành
KeyId,SortOrder,GroupId...).