建表時用了保留字作列名:from, add, comment, order, group, select... 寫 SQL 時直接報錯:
SELECT from FROM table; -- 語法錯誤:from 被解析為關鍵字
INSERT INTO t (add, comment) VALUES (1, 'test'); -- 報錯
SELECT `from` FROM `table`;
INSERT INTO `t` (`add`, `comment`) VALUES (1, 'test');
CREATE TABLE `select` (`order` INT, `group` VARCHAR(20));
CREATE DATABASE `order`;SELECT * FROM `group`;SELECT `select`, `from` FROM `where`;SELECT id AS `id` FROM t;CREATE INDEX `idx` ON t(c);
-- SQL Server
SELECT [from] FROM [table];
-- MySQL 嘗試用 [] 會報錯 (除非開啟 ANSI_QUOTES 模式,但不推薦)
user_from, order_id, comment_textfrom_ip, add_time, comment_contentSHOW KEYWORDS; (MySQL 8.0+) 或官方文檔 Keywords and Reserved Words若設置 SET sql_mode = 'ANSI_QUOTES',雙引號 " 變為標識符引用符,單引號 ' 專用字符串。此模式下:
SELECT "from" FROM "table"; -- 雙引號引用標識符
SELECT 'from' FROM 'table'; -- 錯誤:單引號是字符串
不推薦開啟**:破壞標準 SQL 字符串語義,遷移困難,團隊認知負擔重。
反引號 ` ` 是 MySQL 標識符的「護身符」。遇到保留字衝突、特殊字符、大小寫敏感表名 (Linux 下)、關鍵字做列名,**無腦加反引號**。但根治之道是**命名規範預防衝突**。