Sử dụng dấu gạch dưới (_) trong tên bảng MySQL
MySQL cho phép dấu gạch dưới (_) trong tên bảng, tuy nhiên nếu tên bảng chứa ký tự đặc biệt hoặc từ khóa dành riêng, bắt buộc phải dùng backtick (`) để bao quanh, không dùng dấu nháy đơn (').
Ví dụ: Lỗi khi dùng dấu nháy đơn
mysql> CREATE TABLE 'Demo_Table725'(
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT,
ClientCountryName VARCHAR(100),
isMarried BOOLEAN
);
Kết quả lỗi:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual ... near ''Demo_Table725' (...' at line 1
Sửa đúng: Dùng backtick (`)
mysql> CREATE TABLE `Demo_Table725`(
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT,
ClientCountryName VARCHAR(100),
isMarried BOOLEAN
);
Query OK, 0 rows affected (0.58 sec)
Chèn dữ liệu (cũng phải dùng backtick):
mysql> INSERT INTO `Demo_Table725`(ClientName,ClientAge,ClientCountryName,isMarried)
VALUES('John',34,'US',true);
Query OK, 1 row affected (0.40 sec)
mysql> INSERT INTO `Demo_Table725`(ClientName,ClientAge,ClientCountryName,isMarried)
VALUES('Chris',28,'UK',false);
Query OK, 1 row affected (0.25 sec)
Truy vấn (cũng dùng backtick):
mysql> SELECT * FROM `Demo_Table725`;
+----------+------------+-----------+-------------------+-----------+ | ClientId | ClientName | ClientAge | ClientCountryName | isMarried | +----------+------------+-----------+-------------------+-----------+ | 1 | John | 34 | US | 1 | | 2 | Chris | 28 | UK | 0 | +----------+------------+-----------+-------------------+-----------+ 2 rows in set (0.00 sec)
Quy tắc đặt tên trong MySQL
| Ký tự | Cho phép? | Cần backtick? |
|---|---|---|
| Chữ cái (a-z, A-Z) | ✅ | Không |
| Số (0-9) | ✅ (không bắt đầu bằng số) | Không |
| Dấu gạch dưới (_) | ✅ | Không (trừ khi là từ khóa) |
| Dấu $ | ✅ | Khuyến nghị |
| Ký tự Unicode | ✅ (MySQL 8.0+) | Khuyến nghị |
| Khoảng trắng, @, #, ., -, ... | ❌ (trừ khi dùng backtick) | Bắt buộc |
| Từ khóa dành riêng (SELECT, FROM, TABLE, ...) | ❌ (trừ khi dùng backtick) | Bắt buộc |
Thực hành tốt (Best Practice)
- Luôn dùng backtick (`) cho tên bảng, cột, index, alias để an toàn
- Đặt tên theo chuẩn:
snake_case(ví dụ:user_profiles,order_items) - Tránh từ khóa SQL làm tên định danh
- Cấu hình
sql_mode=ANSI_QUOTEScho phép dùng dấu nháy kép (") cho identifier, nhưng không khuyến khích