คำว่า rank เป็นคำสงวน (reserved word) ของ MySQL ที่ถูกกำหนดตั้งแต่เวอร์ชัน 8.0.2 ดังนั้นจึงไม่สามารถใช้ rank เป็นชื่อคอลัมน์ได้โดยตรง คุณจำเป็นต้องใช้แบ็กทิก (`) ครอบรอบชื่อคอลัมน์ rank เพื่อหลีกเลี่ยงข้อผิดพลาด
ตรวจสอบเวอร์ชัน MySQL
ก่อนอื่นลองตรวจสอบเวอร์ชัน MySQL ที่กำลังใช้งานอยู่ ในตัวอย่างนี้ใช้ MySQL เวอร์ชัน 8.0.12:
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
ปัญหาที่เกิดขึ้นเมื่อใช้ "rank" เป็นชื่อคอลัมน์
หากสร้างตารางโดยไม่ใช้แบ็กทิก จะเกิดข้อผิดพลาดไวยากรณ์ SQL:
mysql> create table DemoTable1596
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> rank int
-> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rank int )' at line 5
ข้อผิดพลาดเกิดขึ้นเพราะใช้คำสงวนเป็นชื่อคอลัมน์โดยไม่ได้จัดการอย่างถูกต้อง
วิธีแก้ไข: ใช้แบ็กทิกครอบชื่อคอลัมน์
สร้างตารางใหม่โดยใช้แบ็กทิก (`) ครอบรอบคำว่า rank:
mysql> create table DemoTable1596
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> `rank` int
-> );
Query OK, 0 rows affected (0.51 sec)
ทดสอบการเพิ่มและดึงข้อมูล
เพิ่มข้อมูลตัวอย่าง:
mysql> insert into DemoTable1596(StudentName,`rank`) values('Bob',4567);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1596(StudentName,`rank`) values('David',1);
Query OK, 1 row affected (0.17 sec)
ดึงข้อมูลทั้งหมด:
mysql> select * from DemoTable1596;
ผลลัพธ์ที่ได้:
+----+-------------+------+ | Id | StudentName | rank | +----+-------------+------+ | 1 | Bob | 4567 | | 2 | David | 1 | +----+-------------+------+ 2 rows in set (0.00 sec)
สรุป: ใน MySQL 8.0.2 ขึ้นไป คำว่า rank เป็นคำสงวน หากต้องการใช้เป็นชื่อคอลัมน์ ต้องใช้แบ็กทิก (`rank`) ครอบรอบทุกครั้งที่อ้างอิงถึงคอลัมน์นี้