การใช้ Backticks (`) สำหรับ Identifier ที่เป็น Reserved Keywords
ใน MySQL หากชื่อตาราง ชื่อคอลัมน์ หรือ Identifier อื่นๆ ชื่อเดียวกับ Reserved Keywords (คำสงวน) ต้องใช้ **Backticks (` `)** ครอบ ไม่ใช่ Single Quotes (' ')
Single Quotes vs Backticks
| สัญลักษณ์ | ชื่อ | ใช้สำหรับ |
|---|---|---|
' ' | Single Quotes | String Literals (ค่าข้อความ) |
` ` | Backticks | Identifiers (ชื่อตาราง, คอลัมน์, อินเด็กซ์, อัลลิส) |
" " | Double Quotes | Identifiers (ถ้า ANSI_QUOTES SQL Mode เปิดอยู่) / String Literals (ปกติ) |
ตัวอย่าง: ใช้คีย์เวิร์ด 'key' และ 'Limit' เป็นชื่อคอลัมน์
1. สร้างตารางด้วย Backticks
CREATE TABLE DemoTable (
`key` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Limit` INT
);
2. เพิ่มข้อมูล (ต้องใช้ Backticks รอบชื่อคอลัมน์)
INSERT INTO DemoTable (`key`, `Limit`) VALUES (NULL, 80);
INSERT INTO DemoTable (`key`, `Limit`) VALUES (NULL, 90);
INSERT INTO DemoTable (`key`, `Limit`) VALUES (NULL, 100);
3. ดูข้อมูล
SELECT * FROM DemoTable;
ผลลัพธ์:
+-----+-------+
| key | Limit |
+-----+-------+
| 1 | 80 |
| 2 | 90 |
| 3 | 100 |
+-----+-------+
4. SELECT คอลัมน์ที่เป็น Keyword
SELECT `key` FROM DemoTable;
ผลลัพธ์:
+-----+
| key |
+-----+
| 1 |
| 2 |
| 3 |
+-----+
คำสงวน (Reserved Keywords) ที่พบบ่อย
SELECT, INSERT, UPDATE, DELETE, WHERE, FROM, TABLE, INDEX, KEY, LIMIT, ORDER, GROUP, BY, ASC, DESC, JOIN, LEFT, RIGHT, INNER, OUTER, ON, AS, DISTINCT, COUNT, SUM, MAX, MIN, AVG, CASE, WHEN, THEN, ELSE, END, IF, NULL, TRUE, FALSE, AND, OR, NOT, IN, LIKE, BETWEEN, EXISTS, PRIMARY, UNIQUE, FOREIGN, REFERENCES, CONSTRAINT, DEFAULT, AUTO_INCREMENT, CREATE, ALTER, DROP, TRUNCATE, RENAME, VIEW, PROCEDURE, FUNCTION, TRIGGER, DATABASE, SCHEMA, USE, SHOW, DESCRIBE, EXPLAIN, LOCK, UNLOCK, COMMIT, ROLLBACK, START, TRANSACTION, SAVEPOINT, RELEASE, SET, GRANT, REVOKE, USER, PASSWORD, IDENTIFIED, BY, WITH, OPTION, PRIVILEGES, FLUSH, RESET, KILL, PURGE, ANALYZE, CHECK, REPAIR, OPTIMIZE, BACKUP, RESTORE, IMPORT, EXPORT, LOAD, DATA, INFILE, OUTFILE, DUMPFILE, REPLACE, IGNORE, VALUES, ROW, ROWS, STATEMENT, PREPARE, EXECUTE, DEALLOCATE, CALL, DO, HANDLER, CURSOR, FETCH, OPEN, CLOSE, DECLARE, BEGIN, END, WHILE, LOOP, REPEAT, UNTIL, ITERATE, LEAVE, RETURN, SIGNAL, RESIGNAL, GET, DIAGNOSTICS, CONDITION, SQLSTATE, ERROR, WARNING, NOT, FOUND, ROW_COUNT, LAST_INSERT_ID, VERSION, CONNECTION_ID, DATABASE, SCHEMA, USER, CURRENT_USER, SESSION_USER, SYSTEM_USER, CHARSET, COLLATION, CHARACTER_SET, COLLATION_NAME, ENGINE, TABLESPACE, PARTITION, SUBPARTITION, LINEAR, HASH, KEY, RANGE, LIST, COLUMNS, EXCHANGE, TRUNCATE, PARTITIONS, ANALYZE, CHECK, OPTIMIZE, REPAIR, REBUILD, REORGANIZE, COALESCE, REMOVE, ADD, DROP, DISCARD, IMPORT, ALGORITHM, COPY, INPLACE, LOCK, NONE, SHARED, EXCLUSIVE, DEFAULT, DEFINER, INVOKER, SQL, SECURITY, DEFINER, CONTEXT, COMMENT, AUTO_INCREMENT, AVG_ROW_LENGTH, CHECKSUM, COMPRESSION, CONNECTION, DATA, DIRECTORY, INDEX, DELAY_KEY_WRITE, ENCRYPTION, INSERT_METHOD, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PACK_KEYS, PASSWORD, ROW_FORMAT, STATS_AUTO_RECALC, STATS_PERSISTENT, STATS_SAMPLE_PAGES, TABLESPACE, UNION, UNIQUE, UNLOCK, UPDATE, USE, USER, USING, UTC_DATE, UTC_TIME, UTC_TIMESTAMP, UUID, UUID_SHORT, VALIDATE, VALUES, VARIABLES, VIEW, WAIT, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WEIGHT_STRING, WHERE, WHILE, XOR, YEAR, YEARWEEK (และอื่นๆ อีกมาก)
Best Practice
- หลีกเลี่ยง ใช้ Reserved Keywords เป็นชื่อ Identifier
- หากจำเป็น ต้องใช้ Backticks (` `) ครอบทุกครั้งที่อ้างอิง
- แนะนำ ใช้ Prefix/Suffix:
my_key,limit_val,order_num - เครื่องมือ GUI (Workbench, phpMyAdmin) มักสร้าง Backticks ให้อัตโนมัติ
การตั้งค่า SQL Mode: ANSI_QUOTES
หากเปิด SET sql_mode = 'ANSI_QUOTES' แล้ว Double Quotes (" ") จะใช้สำหรับ Identifier แทน String Literal