在日常的数据库开发中,我们经常会看到一些 SQL 语句中包含 中括号 []
、双引号 ""
、反引号 ````` 这样的符号。很多初学者会疑惑:这些符号是干什么用的?可不可以省略?不同数据库是不是一样的规则?
数据库 | 定界符形式 | 是否区分大小写(默认) | 示例 |
---|---|---|---|
SQL Server | [标识符] |
否 | [name] 、[order] |
Oracle | "标识符" |
区分大小写 | "Name" ,调用时也要写 "Name" |
MySQL | 标识符 |
否(多数配置) | select 、user name |
1 什么是"标识符"?
在 SQL 中,标识符(identifier) 就是我们给数据库对象起的"名字",比如:
-
表名(如
Student
) -
字段名(如
name
、score
) -
数据库名、视图名、索引名等
2、SQL Server: 定界符使用中括号 []
在 SQL Server 中,中括号 用于 界定标识符,它用于界定表名、列名、数据库名等标识符,主要解决以下问题:
-
避免保留字冲突 :如
select
、order
等字段名。 -
支持特殊字符或空格 :如
user name
、出生日期
。 -
提高兼容性与容错性:特别在复杂的 SQL 语句中。
sql
SELECT [order] FROM [select];-- 合法
SELECT [user name] FROM [用户信息];-- 合法
SELECT [order] FROM [select]; -- 合法
SELECT [user name], [出生日期] FROM [用户信息];-- 合法
中括号并非必须,只有在 标识符 为 保留字 或包含特殊字符时才需要。
-- 推荐写法(更稳健)
SELECT [name], [score] FROM [ScoreInfo];
-- 简写写法(字段名安全时可省略中括号)
SELECT name, score FROM ScoreInfo;
3、Oracle: 定界符使用双引号 "",区分大小写
在 Oracle 中,标识符默认为大写,使用双引号时可以保留大小写,但查询时必须严格匹配:
sql
CREATE TABLE "Student" (
"Id" NUMBER,
"Name" VARCHAR2(50)
);
注意:查询时要区分大小写。
4、MySQL: 定界符使用反引号
,通常不区分大小写
MySQL 使用反引号解决标识符冲突,通常不区分大小写,但在 Linux 系统上,表名可能区分大小写:
sql
CREATE TABLE `select` (
`id` INT,
`value` INT
);
5、编写 SQL 的建议
-
跨平台开发:避免使用保留字、空格、中文、特殊符号作为字段名。
-
SQL Server 开发:推荐在字段名和表名中使用中括号,增加健壮性。
-
Oracle 开发:尽量不要使用双引号定义字段名,避免大小写混乱。
-
MySQL 开发:尽量使用小写字母命名,必要时用反引号包裹保留字。