今天寫程序建表時,將一列命名為 describe,執行 INSERT 語句卻報語法錯誤。經排查發現 DESCRIBE 是 MySQL 保留關鍵字 (同 DESC,用於 DESCRIBE table_name 或 SHOW COLUMNS)。
使用反引號 (backtick) 包裹標識符:
INSERT INTO `table_name` (`describe`) VALUES ('some description');
反引號鍵位於鍵盤左上角 Esc 下方、Tab 上方 (與波浪號 ~ 同鍵)。
SELECT, INSERT, UPDATE, DELETE, WHERE, ORDER, GROUP, BY, DESC, DESCRIBE, INDEX, KEY, PRIMARY, UNIQUE, FOREIGN, REFERENCES, CHECK, CONSTRAINT, TRIGGER, VIEW, PROCEDURE, FUNCTION, TRANSACTION, COMMIT, ROLLBACK, LOCK, UNLOCK, PARTITION, TABLESPACE, ENGINE, CHARSET, COLLATE 等。col_desc, user_desc) 或使用下劃線分隔語義單詞,提高可讀性並避開關鍵字。MySQL 保留字完整列表:MySQL 8.0 Keywords and Reserved Words
關於 DESCRIBE 用法詳解:DESCRIBE 命令詳細說明
一個反引號解決保留字衝突,但源頭規避才是長久之計。建立團隊命名規範,配合自動化工具加反引號,能省去無數莫名其妙的語法錯誤排查時間。