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

在数据库操作中,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 操作

四、新手避坑小贴士

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

相关推荐
腾科IT教育5 小时前
Oracle OCP和MySQL OCP怎么选?方向对比指南
mysql·oracle·ocp·oracle ocp·ocp怎么选·mysql ocp
大牧师5 小时前
Mybatis 框架教程
java·数据库·mybatis·数据持久化·orm
有想法的py工程师6 小时前
PostgreSQL【内核】 CBO 优化器的“早停下注”与数学模型失效分析
数据库·postgresql
冰暮流星6 小时前
sql之计算
数据库·sql
dishugj6 小时前
HANA集群状态监控
数据库·系统架构
小蒜学长7 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai7 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库
SM_YHJ7 小时前
RFID通道门禁与资产台账联动的自动登记技术实现方案
大数据·数据库·人工智能
PaperData7 小时前
2014-2024年省级居民消费结构升级
数据库
砚底藏山河7 小时前
python量化入门:多周期数据对齐统一时间轴
java·数据库·python·金融·maven