一文搞懂 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 时也能更清晰地判断操作风险,避免低级错误。建议结合实际业务场景多练,比如建一张测试表,依次尝试查、增、改、删、授权等操作,加深理解。

相关推荐
l1t7 小时前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
洛豳枭薰7 小时前
MySQL 梳理
数据库·mysql
九.九8 小时前
CANN 算子生态的底层安全与驱动依赖:固件校验与算子安全边界的强化
大数据·数据库·安全
蓝帆傲亦8 小时前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
亓才孓8 小时前
[JDBC]事务
java·开发语言·数据库
PD我是你的真爱粉8 小时前
FastAPI使用tortoiseORM
数据库·fastapi
剩下了什么15 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥16 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉16 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann