在数据库操作中,SQL(结构化查询语言)是与数据库交互的核心工具。但很多初学者面对SELECT、INSERT、CREATE、GRANT等关键字时,常常分不清它们的用途和归属。本文将 SQL 拆解为五大核心分类(DQL、DML、DDL、DCL、TCL),用通俗易懂的语言 + 实战案例,帮你彻底理清它们的定位和用法。
一、先搞懂:为什么要分类?
SQL 关键字看似杂乱,实则各司其职:有的负责 “查数据”,有的负责 “改数据”,有的负责 “建表结构”,有的负责 “管权限 / 事务”。分类后能快速定位关键字用途,避免混淆,也能理解不同操作的本质差异(比如哪些操作能回滚、哪些操作会直接修改结构)。
二、SQL 五大分类详解
1. 数据查询语言(DQL):数据库的 “读档器”
核心作用:仅从数据库中读取 / 检索数据,不修改任何数据,是日常使用频率最高的 SQL 类别。核心关键字:SELECT(核心)、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、JOIN等。
实战案例:
sql
— 查询前十名年龄大于20的用户姓名和手机号,按年龄降序排列
SELECT name, phone
FROM users
WHERE age > 20
ORDER BY age DESC
LIMIT 10;
使用场景:报表统计、页面数据展示、多表关联查询、条件筛选等,只要是 “查数据”,都用 DQL。
2. 数据操作语言(DML):数据库的 “数据编辑器”
核心作用:增 / 删 / 改数据库中的数据内容,仅修改数据本身,不改变表结构(比如不会新增字段、不会改字段类型)。核心关键字:INSERT(新增)、UPDATE(修改)、DELETE(删除)、MERGE(合并,部分数据库支持)。
实战案例:
sql
— 新增一条用户记录
INSERT INTO users (name, age, phone) VALUES ('张三', 25, '13800138000');
— 修改用户手机号(务必加WHERE,否则改全表!)
UPDATE users SET phone = '13900139000' WHERE id = 1;
— 删除年龄小于18的用户
DELETE FROM users WHERE age < 18;
关键提醒:DML 操作默认在事务中,未执行COMMIT前可通过ROLLBACK回滚,避免误操作。
3. 数据定义语言(DDL):数据库的 “结构设计师”
核心作用:定义、修改、删除数据库对象(表、索引、视图、触发器、数据库等)的结构,操作会直接生效(多数数据库无需事务提交,且不可回滚)。核心关键字:CREATE(创建)、ALTER(修改)、DROP(删除)、TRUNCATE(清空表,属于 DDL 而非 DML)、RENAME(重命名)。
实战案例:
sql
— 创建用户表(定义表结构)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT, — 主键+自增
name VARCHAR(50) NOT NULL, — 非空姓名
age INT, — 年龄
phone VARCHAR(20) UNIQUE — 唯一手机号
);
— 给用户表新增email字段(修改表结构)
ALTER TABLE users ADD COLUMN email VARCHAR(100);
— 删除用户表(谨慎!直接删表+数据)
DROP TABLE users;
— 清空表(删除所有数据,不可回滚,比DELETE快)
TRUNCATE TABLE users;
关键提醒:DDL 操作风险极高,尤其是DROP、TRUNCATE,执行前务必备份数据!
4. 数据控制语言(DCL):数据库的 “权限管理员”
核心作用:管理数据库的权限和事务(广义),控制用户对数据库的访问权限,以及确认 / 撤销 DML 操作。核心关键字:GRANT(授权)、REVOKE(撤销权限)、COMMIT(提交事务)、ROLLBACK(回滚事务)。
实战案例:
sql
— 授权:给test用户授予users表的查询/插入权限
GRANT SELECT, INSERT ON users TO 'test'@'localhost';
— 撤销权限:收回test用户的插入权限
REVOKE INSERT ON users FROM 'test'@'localhost';
— 提交事务:确认之前的DML操作(比如新增/修改/删除)
COMMIT;
— 回滚事务:撤销未提交的DML操作
ROLLBACK;
使用场景:数据库管理员(DBA)配置用户权限、开发人员确认 / 撤销数据修改。
5. 事务控制语言(TCL):数据库的 “事务操盘手”
补充说明:部分分类体系中,TCL 会从 DCL 中独立出来,专门聚焦事务管理(本质是 DCL 的子集)。核心作用:精准控制事务的提交、回滚,支持设置保存点,实现精细化的事务管理。核心关键字:COMMIT、ROLLBACK、SAVEPOINT。
实战案例:
sql
— 开启事务(MySQL需显式声明,Oracle默认自动事务)
START TRANSACTION;
— 第一步:修改用户年龄
UPDATE users SET age = 26 WHERE id = 1;
— 设置保存点:标记当前位置
SAVEPOINT sp1;
— 第二步:删除某条用户记录
DELETE FROM users WHERE id = 2;
— 回滚到保存点:仅撤销删除操作,修改年龄的操作保留
ROLLBACK TO sp1;
— 提交最终修改:仅确认年龄修改
COMMIT;
使用场景:多步 DML 操作需要 “要么全成、要么全败” 时(比如转账:扣减 A 账户 + 增加 B 账户),用 TCL 保证数据一致性。
三、核心总结表
为了方便记忆,整理了一张核心对照表,建议收藏:
表格
| DQL | 查询数据 | SELECT、FROM、WHERE | 多表查询、统计 | -(仅读取) |
| DML | 增删改数据 | INSERT、UPDATE、DELETE | 新增记录、改值 | 未 COMMIT 前可回滚 |
| DDL | 定义 / 修改数据库结构 | CREATE、ALTER、DROP | 建表、删索引 | 不可回滚 |
| DCL | 权限 / 事务控制(广义) | GRANT、REVOKE、COMMIT | 授权、提交事务 | – |
| TCL | 事务控制(狭义) | COMMIT、ROLLBACK、SAVEPOINT | 回滚、保存点 | 仅针对 DML 操作 |
四、新手避坑小贴士
总结
SQL 的五大分类本质是按 “操作目的” 划分:
- 查数据用 DQL,改数据用 DML;
- 改结构用 DDL,管权限用 DCL;
- 控事务用 TCL(DCL 子集)。
掌握分类后,再遇到 SQL 关键字就能快速定位其用途,写 SQL 时也能更清晰地判断操作风险,避免低级错误。建议结合实际业务场景多练,比如建一张测试表,依次尝试查、增、改、删、授权等操作,加深理解。

