在数据库操作中,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 操作 |
四、新手避坑小贴士
- DML 操作必加 WHERE :没有 WHERE 的
UPDATE/DELETE会修改 / 删除全表数据,新手务必谨慎; - DDL 操作先备份 :
DROP/TRUNCATE执行后无法恢复,操作前一定要备份核心数据; - 事务只对 DML 生效 :DDL 操作不受事务控制,执行后直接生效,不要指望用
ROLLBACK撤销; - 权限最小化 :给用户授权时遵循 "最小权限原则",比如只读数据就只授
SELECT权限,避免权限过大导致风险。
总结
SQL 的五大分类本质是按 "操作目的" 划分:
- 查数据用 DQL,改数据用 DML;
- 改结构用 DDL,管权限用 DCL;
- 控事务用 TCL(DCL 子集)。
掌握分类后,再遇到 SQL 关键字就能快速定位其用途,写 SQL 时也能更清晰地判断操作风险,避免低级错误。建议结合实际业务场景多练,比如建一张测试表,依次尝试查、增、改、删、授权等操作,加深理解。