กฎการตั้งชื่อ Identifier ใน MySQL
MySQL อนุญาตให้ใช้ Underscore (_) ในชื่อตาราง/คอลัมน์ได้ **แต่ต้องห่อด้วย Backtick (`) เสมอ** ห้ามใช้ Single Quote (')
ตัวอย่างที่ผิด (ใช้ Single Quote)
mysql> CREATE TABLE 'Demo_Table725' (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT,
ClientCountryName VARCHAR(100),
isMarried BOOLEAN
);
ERROR 1064 (42000): You have an error in your SQL syntax...
near ''Demo_Table725' (ClientId int NOT NULL...
ตัวอย่างที่ถูกต้อง (ใช้ 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)
Insert และ Select ต้องใช้ Backtick เช่นกัน:
mysql> INSERT INTO `Demo_Table725` (ClientName, ClientAge, ClientCountryName, isMarried)
VALUES ('John', 34, 'US', TRUE), ('Chris', 28, 'UK', FALSE);
Query OK, 2 rows affected
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)
กฎ Identifier ใน MySQL
- Backtick (
`) - ใช้ห่อ **Identifier** (ชื่อตาราง, คอลัมน์, ดัชนี, ฐานข้อมูล) - **มาตรฐาน MySQL** - Single Quote (
') - ใช้ห่อ **String Literal** (ข้อความ, วันที่) - **มาตรฐาน SQL** - Double Quote (
") - ใช้ห่อ String ได้ ถ้าANSI_QUOTESmode ปิด (ค่าเริ่มต้น) แต่ถ้าเปิด จะกลายเป็น Identifier
เมื่อไหร่ต้องใช้ Backtick บังคับ
- ชื่อมีอักขระพิเศษ:
_,-,., ช่องว่าง, ตัวเลขนำหน้า - ชื่อเป็น Reserved Word:
select,from,where,order,group,key,indexฯลฯ - ชื่อมีตัวพิมพ์ใหญ่-เล็ก และต้องการ Case Sensitive (ขึ้นกับ OS/File System)
แนะนำ: ใช้ Backtick เสมอสำหรับ Identifier ทุกตัว
SELECT `id`, `name` FROM `my_table` WHERE `status` = 'active';