SQL 语句分类与语法基础
本教程共 46 篇 · 第 5 篇 · 更新于 2026-07-30 · 约 11 分钟阅读
5. SQL 语句分类与语法基础
本节目标:把 SQL 语句按用途分成五大类搞清楚,知道每类对应哪些命令;同时掌握关键字大小写、语句结束符、注释写法、命名规范这些写 SQL 的基础规矩。
前面我们连上了 MySQL,但还没真正写过几条 SQL。在动手建库建表之前,得先把 SQL 的”语法地图”建立起来。这一节是后面所有章节的地基。
5.1 SQL 是什么
SQL(Structured Query Language,结构化查询语言) 是用来和关系型数据库”对话”的标准语言。你想建表、插数据、查数据、改数据、删数据、管权限,统统用 SQL 表达。
SQL 是国际标准(最新是 SQL:2023),但每个数据库厂商都有自己的扩展。MySQL 的 SQL 大部分遵循标准,又加了不少自家特性(比如 LIMIT、AUTO_INCREMENT、存储引擎等)。本教程学的是 MySQL 方言。
5.2 SQL 的五大分类
这是本节的重点。SQL 语句按”做什么”分成五类,每类管一摊事。记住这五类,后面学任何命令都能对号入座。
| 分类 | 全称 | 作用 | 典型语句 |
|---|---|---|---|
| DDL | Data Definition Language | 定义结构(库、表、列、索引) | CREATE、ALTER、DROP |
| DML | Data Manipulation Language | 操作数据(增删改) | INSERT、UPDATE、DELETE |
| DQL | Data Query Language | 查询数据 | SELECT |
| DCL | Data Control Language | 控制权限 | GRANT、REVOKE |
| TCL | Transaction Control Language | 控制事务 | BEGIN、COMMIT、ROLLBACK |
下面逐类解释。
DDL:数据定义语言
DDL 用来定义和修改数据库对象的结构,操作的是”骨架”,不是数据本身。比如建一张表、给表加列、删个库。
-- 建库
CREATE DATABASE shop;
-- 建表
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50)
);
-- 改表结构:加列
ALTER TABLE users ADD COLUMN email VARCHAR(100);
-- 删表
DROP TABLE users;
DDL 的特点是自动提交:执行完立即生效,不用也不能回滚。本教程 06~15 章全是 DDL 内容。
DML:数据操纵语言
DML 用来操作表里的数据,即”增删改”。它操作的是表里的行。
-- 插入一行
INSERT INTO users(id, username) VALUES(1, 'zhangsan');
-- 修改数据
UPDATE users SET username = 'lisi' WHERE id = 1;
-- 删除数据
DELETE FROM users WHERE id = 1;
NoteDML 和 DDL 的区别:DDL 改”表结构”(有几个列、什么类型),DML 改”表数据”(每行存什么值)。
DROP TABLE是 DDL(连表带数据全没),DELETE FROM是 DML(只删数据,表还在)。
DQL:数据查询语言
DQL 只有一个核心语句:SELECT。但它是 SQL 里最复杂、最强大的部分,后面要花十几章讲。
-- 查所有
SELECT * FROM users;
-- 条件查询
SELECT username, email FROM users WHERE age > 18 ORDER BY created_at DESC;
有些资料不把 DQL 单列,归到 DML 里。但 MySQL 圈子习惯单独叫 DQL,因为查询实在太重要了。
DCL:数据控制语言
DCL 管权限:谁能访问什么、能做什么操作。
-- 给账号授权
GRANT SELECT, INSERT ON shop.* TO 'appuser'@'localhost';
-- 收回权限
REVOKE INSERT ON shop.* FROM 'appuser'@'localhost';
创建账号(CREATE USER)、删账号(DROP USER)也算这一类。
TCL:事务控制语言
TCL 管事务,保证一组操作要么全成功、要么全撤销。
BEGIN; -- 开启事务
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交,永久生效
-- 或者 ROLLBACK; 回滚,撤销上面的修改
事务是 InnoDB 的核心特性,后面会专门讲。
5.3 关键字大小写:写法自由,但建议统一
SQL 的关键字(SELECT、FROM、WHERE 等)不区分大小写。下面三句完全等价:
SELECT * FROM users;
select * from users;
SeLeCt * FrOm users;
但有两个东西是区分大小写的:
- 数据值:
WHERE name = 'Tom'和WHERE name = 'tom'查出来的可能不一样(取决于排序规则); - 标识符(库名、表名):在 Linux 上区分大小写,Windows/macOS 默认不区分。
Tip业界惯例:关键字大写,表名列名小写。这样一眼能看出哪些是 SQL 语法、哪些是你自己起的名字,可读性好很多。本教程全程这么写,建议你也养成这习惯。
5.4 语句结束符:分号不可少
在 mysql 命令行里,每条 SQL 语句必须以分号 ; 结尾,否则 MySQL 会认为你没说完,一直等你继续输入:
mysql> SELECT * FROM users
-> -- 这里光标还在闪,没执行
-> ; -- 加上分号才执行
看到 -> 这个续行提示符,说明语句还没结束。要么补完加分号,要么敲 \c 放弃。
Note有些客户端(图形化工具、程序里的 SQL)不强制分号,因为它们自己知道一条语句在哪结束。但命令行必须加。养成加分号的习惯没坏处。
5.5 注释:给人看的备注
SQL 里写注释有三种方式:
单行注释:--
-- 这是一行注释,注意 -- 后面有个空格
SELECT * FROM users; -- 行尾也能注释
Warning
--后面必须有一个空格或制表符,否则 MySQL 会把它当成负号运算。这是新手常踩的坑。写成--注释是错的,要写成-- 注释。
单行注释:#
# 这是 MySQL 特有的单行注释,# 后面不用空格
SELECT * FROM users;
# 是 MySQL 扩展,标准 SQL 没有,跨数据库时少用。
多行注释:/* */
/*
这是多行注释
可以写好几行
适合写详细说明
*/
SELECT * FROM users;
/* */ 是标准 SQL,所有数据库都支持,也常用来临时屏蔽一段代码。
5.6 标识符命名规范
库名、表名、列名这些统称标识符(Identifier)。起名最好遵循规范,省得后面麻烦:
- 用字母、数字、下划线,别用中文、空格、特殊符号;
- 不能纯数字,也不能是 SQL 关键字(如
select、order); - 长度适中,表名建议 30 字符内;
- 见名知意:
users、orders、created_at这种就很好; - 风格统一:要么全
snake_case(下划线),要么全camelCase,别混着来。
如果非要起带空格或特殊字符的名字,得用反引号包起来:
CREATE TABLE `order details` (`user id` INT); -- 能跑,但千万别这么干
Tip反引号是 MySQL 的转义符,标准 SQL 用双引号。起规范的名字,就根本用不到反引号。
5.7 数据值的写法
写 SQL 时,不同类型的数据值写法不同:
- 字符串和日期:必须用单引号包起来,如
'zhangsan'、'2026-07-30'; - 数字:直接写,不用引号,如
18、99.5; - NULL:表示”没有值”,直接写
NULL,不用引号。
INSERT INTO users(id, username, age, created_at)
VALUES(1, 'zhangsan', 25, '2026-07-30 10:00:00');
UPDATE users SET age = NULL WHERE id = 1;
Warning别用双引号包字符串。标准 SQL 里双引号是”标识符引用”,MySQL 默认也能用,但容易出错。统一用单引号最稳。
5.8 一条 SQL 的基本结构
以最常用的 SELECT 为例,看看一条 SQL 的骨架:
SELECT 要查的列 -- 选什么
FROM 表名 -- 从哪查
WHERE 条件 -- 筛选哪些行
GROUP BY 分组列 -- 按什么分组
HAVING 分组后的条件 -- 筛选哪些组
ORDER BY 排序列 -- 按什么排序
LIMIT 行数; -- 限制返回几行
执行顺序和书写顺序不一样,大致是 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。这个后面查询章会细讲,先记住书写顺序。
5.9 小结
这一节建立了 SQL 的全局认知:
- SQL 分五类:DDL 建结构、DML 改数据、DQL 查数据、DCL 管权限、TCL 控事务;
- 关键字大小写不敏感,但建议关键字大写、表名列名小写;
- 命令行里语句必须以分号结尾,
\c可取消未完成语句; - 注释有
--、#、/* */三种,--后面要留空格; - 标识符用字母数字下划线,字符串日期用单引号,数字不用引号。
地基打好,下一节就开始用 DDL 建你的第一个数据库。