Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สามารถใช้ "rank" เป็นชื่อคอลัมน์ใน MySQL 8 ได้หรือไม่?

คำว่า 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`) ครอบรอบทุกครั้งที่อ้างอิงถึงคอลัมน์นี้