SQL 通用语法与分类总览
本节内容
- 固定 SQL 通用语法规则。
- 回顾 DDL、DML、DQL、DCL 四类 SQL 的职责边界。
- 指向 DDL/DML/DQL/DCL 各篇笔记。
SQL 通用语法规则
以下规则适用于 MySQL 9.6.0 中所有 SQL 语句。
大小写
- SQL 关键字不区分大小写,但本笔记统一大写:
SELECT、FROM、WHERE。 - 数据库名、表名、字段名在 macOS 上区分大小写(取决于文件系统和
lower_case_table_names设置)。为免踩坑,统一小写加下划线。 - 字符串值区分大小写:
'Tom'和'tom'在WHERE name = 'Tom'中是不同的。
语句结尾
每条 SQL 语句以分号结尾:
SELECT VERSION();
在 mysql 客户端中,分号是默认的语句结束符。如果忘记分号,客户端会进入多行等待状态,在下一行继续输入直到收到分号。
空白与换行
SQL 忽略多余空格和换行。一条 SQL 可以写成一行,也可以拆成多行提高可读性:
SELECT id, name, age FROM tb_user WHERE age > 18;
-- 等价写法
SELECT id, name, age
FROM tb_user
WHERE age > 18;
注释
MySQL 支持三种注释:
-- 单行注释(注意 -- 后面必须有一个空格)
# 单行注释
/*
多行注释
可以跨越多行
*/
字符串
字符串统一使用单引号:
SELECT 'hello';
MySQL 在默认模式下也接受双引号,但标准 SQL 中双引号用于标识符引用,所以本笔记只用单引号。
如果字符串本身包含单引号,用两个连续单引号转义:
SELECT 'It''s a test';
标识符
标识符(数据库名、表名、字段名、别名)在不需要反引号时直接写:
SELECT name FROM tb_user;
如果名称恰好是 MySQL 保留字,用反引号括起来:
SELECT `from`, `to` FROM `order`;
本笔记的表名和字段名尽量避开保留字,减少反引号使用。
SQL 四分类总览
01 篇提过分类,这里再明确一下每一类的判断标准:
| 分类 | 全称 | 操作对象 | 典型动词 | 是否产生数据 |
|---|---|---|---|---|
| DDL | Data Definition Language | 数据库对象(库、表、字段、索引) | CREATE、DROP、ALTER |
否(只改结构) |
| DML | Data Manipulation Language | 表中的数据行 | INSERT、UPDATE、DELETE |
是 |
| DQL | Data Query Language | 表中的数据行 | SELECT |
否 |
| DCL | Data Control Language | 用户和权限 | GRANT、REVOKE |
否 |
快速判断一句 SQL 属于哪一类:
- 改结构 → DDL,改数据 → DML。
- 查数据 → DQL。
- 管用户和权限 → DCL。
各分类笔记入口
| 分类 | 状态 |
|---|---|
| DDL | 已发布 |
| DML | 待整理 |
| DQL | 待整理 |
| DCL | 待整理 |
