首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 字段名/表名與保留字衝突解決:反引號 ` ` 讓標識符合法化

     編輯:MySQL 綜合教學

問題現場

建表時用了保留字作列名:from, add, comment, order, group, select... 寫 SQL 時直接報錯:


SELECT from FROM table;  -- 語法錯誤:from 被解析為關鍵字
INSERT INTO t (add, comment) VALUES (1, 'test');  -- 報錯

解決方案:反引號 ` ` (鍵盤 1 左側鍵,非單引號 ')


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 用方括號 []


-- SQL Server
SELECT [from] FROM [table];
-- MySQL 嘗試用 [] 會報錯 (除非開啟 ANSI_QUOTES 模式,但不推薦)

最佳實踐:命名規範避開保留字

  1. 業務前綴**:user_from, order_id, comment_text
  2. 後綴區分**:from_ip, add_time, comment_content
  3. 查閱保留字列表**:SHOW KEYWORDS; (MySQL 8.0+) 或官方文檔 Keywords and Reserved Words
  4. 工具自動加反引號**:Navicat/DataGrip/Workbench 導出 DDL 會自動加反引號,信任工具

特殊情況:ANSI_QUOTES SQL 模式

若設置 SET sql_mode = 'ANSI_QUOTES',雙引號 " 變為標識符引用符,單引號 ' 專用字符串。此模式下:


SELECT "from" FROM "table";  -- 雙引號引用標識符
SELECT 'from' FROM 'table';  -- 錯誤:單引號是字符串

不推薦開啟**:破壞標準 SQL 字符串語義,遷移困難,團隊認知負擔重。

總結

反引號 ` ` 是 MySQL 標識符的「護身符」。遇到保留字衝突、特殊字符、大小寫敏感表名 (Linux 下)、關鍵字做列名,**無腦加反引號**。但根治之道是**命名規範預防衝突**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved