前言
很多初学 SQL 的同学,写语句时完全分不清: 到底建表、改表、增删改查、权限控制、事务回滚属于哪一类? 网上 SQL 语句乱七八糟,记不住、分不清、用的时候瞎写; 面试常问:SQL 分为哪四大类?各自作用是什么?完全答不上来; 工作中误把 DDL 随便在生产环境执行,导致表结构变更、线上故障; 不懂 TCL 事务,转账、订单业务出错时不会回滚,造成数据错乱。
其实所有 SQL 语句,都可以归为DDL、DML、DCL、TCL四大类。 今天用大白话 + 场景 + 实操代码,帮你彻底归类、分清边界、记住用法,入门、面试、上班都能用。
知识点精讲
一、SQL 整体体系概述
标准 SQL 语法按功能划分为四大核心语言:
- DDL 数据定义语言:管库、管表结构
- DML 数据操作语言:管表里的数据增删改查
- DCL 数据控制语言:管账号、权限、授权
- TCL 事务控制语言:管事务提交、回滚、数据一致性
记住一句话:DDL 改结构,DML 改数据,DCL 管权限,TCL 管事务。
二、DDL 数据定义语言
核心作用:定义和修改数据库、数据表、索引、视图等结构,不操作表里面的数据。 常用关键字:CREATE、ALTER、DROP、TRUNCATE适用场景: 建库、建表、改字段、删表、删除库、创建索引、删除视图。 重要特点:DDL 执行后不可回滚,生产环境慎用,一旦删表无法恢复。
三、DML 数据操作语言
核心作用:操作表里面的业务数据,增删改查日常业务全靠它。 常用关键字:SELECT、INSERT、UPDATE、DELETE适用场景: 查询数据、新增记录、修改内容、删除单条 / 多条业务数据。 特点: 可以配合事务 TCL实现提交和回滚,误操作可以撤销。
四、DCL 数据控制语言
核心作用:管理数据库用户、账号权限,给谁授权、收回权限。 常用关键字:GRANT、REVOKE适用场景: 创建开发账号、给别人分配查询 / 修改权限、回收高危权限、生产环境权限管控。
五、TCL 事务控制语言
核心作用:控制事务提交、回滚、保存点,保证多步操作要么全变、要么全不变。 常用关键字:COMMIT、ROLLBACK、START TRANSACTION适用场景: 转账、下单、扣库存等多条 SQL 必须同时成功或同时失败的业务场景。
通俗类比 + 实例表格
通俗类比
把数据库比作一栋写字楼:
- DDL:负责盖楼、拆房间、改户型(建库、建表、改结构)
- DML:负责搬家具、换物品(增删改查表里数据)
- DCL:负责发门禁卡、收门禁权限(账号授权、回收权限)
- TCL:负责整层验收、出错全部复原(事务提交、回滚)
四大 SQL 语言汇总表
表格
| 分类 | 全称 | 核心关键字 | 核心作用 | 能否事务回滚 |
|---|---|---|---|---|
| DDL | 数据定义语言 | CREATE/ALTER/DROP/TRUNCATE | 建库建表、改结构、删对象 | 不能回滚 |
| DML | 数据操作语言 | SELECT/INSERT/UPDATE/DELETE | 增删改查业务数据 | 可以回滚 |
| DCL | 数据控制语言 | GRANT/REVOKE | 授权、回收权限 | 一般不事务控制 |
| TCL | 事务控制语言 | COMMIT/ROLLBACK | 事务提交、回滚 | 专门管控事务 |
SQL 代码演示
1. DDL 语句示例(改结构)
sql
-- 创建数据库 CREATE DATABASE sql_demo; -- 创建数据表 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); -- 修改表结构:新增字段 ALTER TABLE student ADD age INT; -- 清空表所有数据、释放空间 TRUNCATE TABLE student; -- 删除数据表 DROP TABLE student;2. DML 语句示例(改数据)
sql
-- 查询 SELECT * FROM student; -- 插入数据 INSERT INTO student(name,age) VALUES ('张三',22); -- 修改数据 UPDATE student SET age=23 WHERE name='张三'; -- 删除单条记录 DELETE FROM student WHERE name='张三';3. DCL 语句示例(权限管控)
sql
-- 给用户授权查询、修改权限 GRANT SELECT,INSERT,UPDATE ON sql_demo.* TO 'dev'@'localhost'; -- 回收权限 REVOKE INSERT,UPDATE ON sql_demo.* FROM 'dev'@'localhost';4. TCL 事务语句示例(提交 / 回滚)
sql
-- 开启事务 START TRANSACTION; -- 执行多条DML操作 INSERT INTO student(name) VALUES ('李四'); UPDATE student SET age=20 WHERE name='李四'; -- 无异常就提交 COMMIT; -- 有异常就回滚,撤销所有操作 ROLLBACK;易错 / 避坑点
❌ 分不清TRUNCATE 和 DELETE✅ 正解: DELETE 是DML,删单行数据、可回滚; TRUNCATE 是DDL,清空全表、不可回滚、生产慎用。
❌ 生产环境随意执行 DROP、ALTER ✅ 正解:DDL 不可回滚,线上变更必须先走测试、备份数据,禁止随手执行。
❌ 复杂业务不用事务,直接裸写 DML ✅ 正解:转账、下单、扣库存必须加TCL 事务,防止一半成功一半失败。
❌ 把 SELECT 当成独立类别 ✅ 正解:SELECT 属于DML,归数据操作语言范畴。
❌ 随便给开发账号授予 ALL 全部权限 ✅ 正解:DCL 权限最小化原则,只给岗位必需权限,防止误删库表。
核心小结
- DDL:管库表结构,CREATE/ALTER/DROP/TRUNCATE,不可回滚,生产慎用;
- DML:管业务数据,SELECT/INSERT/UPDATE/DELETE,日常开发最常用;
- DCL:管账号权限,GRANT 授权、REVOKE 回收,企业权限管控必备;
- TCL:管事务流程,COMMIT 提交、ROLLBACK 回滚,保证数据一致性;
- 记住口诀:DDL 改结构、DML 改数据、DCL 管权限、TCL 管事务,面试必背、工作必用。
思考题
思考题 1
SQL 四大语言分别是什么?各自核心职责是什么?
答案: DDL 数据定义语言:负责库、表、索引等结构创建与修改; DML 数据操作语言:负责数据查询、新增、修改、删除; DCL 数据控制语言:负责用户授权与权限回收; TCL 事务控制语言:负责事务提交、回滚,保障数据一致。
思考题 2
DELETE 和 TRUNCATE 分别属于哪类 SQL?最大区别是什么?
答案: DELETE 属于DML,可以带条件删除、支持事务回滚; TRUNCATE 属于DDL,清空整张表、不支持事务回滚、速度更快、生产风险更高。
思考题 3
订单支付、资金转账业务,为什么必须用到 TCL 事务?
答案: 这类业务有多步 SQL 操作,必须满足要么全部执行成功,要么全部撤销; 通过 TCL 开启事务,正常就 COMMIT 提交,出错就 ROLLBACK 回滚,避免出现数据错乱、资金不平。