一文搞懂 SQL 五大分类:DQL/DML/DDL/DCL/TCL

在数据库操作中,SQL(结构化查询语言)是与数据库交互的核心工具。但很多初学者面对SELECTINSERTCREATEGRANT等关键字时,常常分不清它们的用途和归属。本文将 SQL 拆解为五大核心分类(DQL、DML、DDL、DCL、TCL),用通俗易懂的语言 + 实战案例,帮你彻底理清它们的定位和用法。

一、先搞懂:为什么要分类?

SQL 关键字看似杂乱,实则各司其职:有的负责 "查数据",有的负责 "改数据",有的负责 "建表结构",有的负责 "管权限 / 事务"。分类后能快速定位关键字用途,避免混淆,也能理解不同操作的本质差异(比如哪些操作能回滚、哪些操作会直接修改结构)。

二、SQL 五大分类详解

1. 数据查询语言(DQL):数据库的 "读档器"

核心作用 :仅从数据库中读取 / 检索数据,不修改任何数据,是日常使用频率最高的 SQL 类别。核心关键字SELECT(核心)、FROMWHEREGROUP BYHAVINGORDER BYLIMITJOIN等。

实战案例

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 操作风险极高,尤其是DROPTRUNCATE,执行前务必备份数据!

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 的子集)。核心作用 :精准控制事务的提交、回滚,支持设置保存点,实现精细化的事务管理。核心关键字COMMITROLLBACKSAVEPOINT

实战案例

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 操作

四、新手避坑小贴士

  1. DML 操作必加 WHERE :没有 WHERE 的UPDATE/DELETE会修改 / 删除全表数据,新手务必谨慎;
  2. DDL 操作先备份DROP/TRUNCATE执行后无法恢复,操作前一定要备份核心数据;
  3. 事务只对 DML 生效 :DDL 操作不受事务控制,执行后直接生效,不要指望用ROLLBACK撤销;
  4. 权限最小化 :给用户授权时遵循 "最小权限原则",比如只读数据就只授SELECT权限,避免权限过大导致风险。

总结

SQL 的五大分类本质是按 "操作目的" 划分:

  • 查数据用 DQL,改数据用 DML;
  • 改结构用 DDL,管权限用 DCL;
  • 控事务用 TCL(DCL 子集)。

掌握分类后,再遇到 SQL 关键字就能快速定位其用途,写 SQL 时也能更清晰地判断操作风险,避免低级错误。建议结合实际业务场景多练,比如建一张测试表,依次尝试查、增、改、删、授权等操作,加深理解。

相关推荐
一勺菠萝丶4 分钟前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
无忧智库7 分钟前
某大型银行“十五五”金融大模型风控与智能投顾平台建设方案深度解读(WORD)
数据库·金融
爱码小白9 分钟前
数据库多表命名的通用规范
数据库·python·mysql
专注VB编程开发20年10 分钟前
Windows11 ARM系统直接运行X86 exe,高通CPU同时运行安卓APP,任意软件
microsoft
jnrjian23 分钟前
Json text index 未读
oracle
huohuopro24 分钟前
Hbase伪分布式远程访问配置
数据库·分布式·hbase
XDHCOM36 分钟前
ORA-12169: TNS连接标识符过长,Oracle报错故障修复与远程处理
数据库·oracle
爬山算法1 小时前
MongoDB(86)如何使用MongoDB存储大文件?
数据库·mongodb
xcLeigh1 小时前
KES数据库表空间目录自动创建特性详解与存储运维最佳实践
大数据·运维·服务器·数据库·表空间·存储
小陈工1 小时前
2026年4月8日技术资讯洞察:边缘AI推理框架竞争白热化,Python后端开发者的机遇与挑战
开发语言·数据库·人工智能·python·微服务·回归