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

แก้ไข Syntax Error MySQL: สร้างตารางชื่อ Reserved Keyword (groups)

ปัญหา: groups เป็น Reserved Keyword

MySQL จำกัดคำสงวน (Reserved Keywords) ไม่ให้ใช้เป็นชื่อตาราง/คอลัมน์โดยตรง

Error ที่เกิดขึ้น

mysql> CREATE TABLE groups (id INT, name VARCHAR(40));
ERROR 1064 (42000): You have an error in your SQL syntax...
near 'groups (id int, name varchar(40))' at line 1

วิธีแก้: ใช้ Backticks (` `)

CREATE TABLE `groups` (
    id INT,
    name VARCHAR(40)
);

การใช้งานต่อไปต้องใช้ Backticks เสมอ

INSERT INTO `groups` VALUES (10, 'John'), (11, 'Bob'), (12, 'Mike');

SELECT * FROM `groups`;

ผลลัพธ์

+------+------+
| id   | name |
+------+------+
| 10   | John |
| 11   | Bob  |
| 12   | Mike |
+------+------+

Reserved Keywords ที่พบบ่อย

คำสงวนความหมายตัวเลือกแทน
GROUPGROUP BYgrp, team, category
ORDERORDER BYord, sort_order
INDEXCREATE INDEXidx, index_name
KEYPRIMARY KEYkey_id, pk
REFERENCESFK constraintref, fk_ref
TABLECREATE TABLEtbl, table_name
USERCREATE USERusr, app_user
DATABASECREATE DATABASEdb, schema_name
SELECT, INSERT, UPDATE, DELETEDML commandsหลีกเลี่ยงใช้เป็น identifier

Best Practice: หลีกเลี่ยง Reserved Keywords ทั้งหมด

  • ตั้งชื่อเป็นภาษาอังกฤษที่อธิบายความหมายชัดเจน: user_groups, order_items, index_config
  • ใช้ Prefix: tbl_groups, col_order
  • ใช้เครื่องมือตรวจสอบ: SHOW KEYWORDS หรือดู MySQL Keywords Reference

แสดงคำสงวนทั้งหมด

SHOW KEYWORDS;

หรือ query จาก INFORMATION_SCHEMA (MySQL 8.0+):

SELECT * FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;

ตัวอย่างอื่น: คอลัมน์ชื่อ order

CREATE TABLE orders (
    id INT PRIMARY KEY,
    `order` INT,  -- ต้องใช้ backticks
    amount DECIMAL(10,2)
);