Quy tắc cơ bản
Trong MySQL, identifier (tên bảng, cột, procedure, view...) có thể:
- Không quote: Nếu không phải từ khóa reserved và không chứa ký tự đặc biệt.
- Có backtick
`: Bắt buộc khi identifier là từ khóa reserved, chứa khoảng trắng, ký tự đặc biệt, hoặc bắt đầu bằng số.
Ví dụ bắt buộc dùng backtick
Tạo bảng với tên bảng và cột là từ khóa reserved:
CREATE TABLE `INT` (
`select` INT,
`varchar` VARCHAR(100)
);
Chèn dữ liệu:
INSERT INTO `INT` VALUES (1, 'MySQL'), (2, 'MongoDB'), (3, 'Java'), (4, 'C');
Truy vấn (bắt buộc backtick):
SELECT * FROM `INT`;
Kết quả:
+--------+---------+
| select | varchar |
+--------+---------+
| 1 | MySQL |
| 2 | MongoDB |
| 3 | Java |
| 4 | C |
+--------+---------+
Khi nào KHÔNG cần backtick
-- Tên thông thường, không trùng từ khóa
CREATE TABLE users (id INT, name VARCHAR(100));
SELECT id, name FROM users;
Best Practice
- Luôn dùng backtick trong code production, migration scripts, ORM-generated queries để an toàn tuyệt đối.
- Backtick là MySQL-specific. Chuẩn SQL dùng double quote
"(cần bậtANSI_QUOTESsql_mode). - Tránh đặt tên trùng từ khóa reserved (
SELECT,ORDER,GROUP,INDEX,KEY...).
Danh sách từ khóa reserved phổ biến
SELECT, INSERT, UPDATE, DELETE, WHERE, ORDER, GROUP, BY, LIMIT, JOIN, LEFT, RIGHT, INNER, OUTER, INDEX, KEY, PRIMARY, UNIQUE, FOREIGN, REFERENCES, TABLE, DATABASE, CREATE, ALTER, DROP, TRUNCATE, VIEW, PROCEDURE, FUNCTION, TRIGGER, EVENT, PARTITION, ...