目录
DML(数据操作语言)和 DDL(数据定义语言)是 SQL 语言的两大核心分类,核心区别在于操作对象、目的、事务特性、执行结果 等维度,下面通过「核心对比+详细解析+示例」的方式清晰说明:
一、核心区别总览表
| 维度 | DDL(数据定义语言) | DML(数据操作语言) |
|---|---|---|
| 操作对象 | 数据库、表、索引、视图等「数据库对象的结构」 | 表中的「数据行/记录」 |
| 核心目的 | 定义/修改/删除数据库对象的结构 | 增删改查数据库中的数据 |
| 事务特性 | 自动提交(不可回滚,除非数据库支持 DDL 回滚) | 可手动提交/回滚(默认事务未提交可撤销) |
| 锁机制 | 锁整个对象(如锁表),影响范围大 | 锁数据行/页,影响范围小 |
| 常见命令 | CREATE、ALTER、DROP、TRUNCATE、RENAME 等 | INSERT、UPDATE、DELETE、SELECT 等 |
| 执行后影响 | 改变数据库/表的结构(如新增列、删除表) | 改变表中的数据(如新增行、修改字段值) |
| 是否依赖事务 | 不依赖,执行即生效 | 依赖事务(可通过 COMMIT/ROLLBACK 控制) |
二、详细解析
1. DDL(Data Definition Language):数据定义语言
聚焦于「数据库对象的结构」,相当于“搭建数据库/表的骨架”,操作后会直接修改数据库的元数据(描述数据的数据)。
核心特点:
- 操作不可逆(多数数据库中,DDL 执行后自动提交,无法用 ROLLBACK 回滚,比如 DROP TABLE 删表后数据和结构都消失);
- 执行时会锁定整个对象(比如 ALTER TABLE 时,表会被锁定,其他操作无法访问);
- 影响数据库的“结构”,而非“内容”。
常见命令及示例:
| 命令 | 作用 | 示例 |
|---|---|---|
| CREATE | 创建数据库对象 | CREATE TABLE user (id INT, name VARCHAR(20)); |
| ALTER | 修改数据库对象结构 | ALTER TABLE user ADD age INT;(新增age列) |
| DROP | 删除数据库对象 | DROP TABLE user;(删除user表) |
| TRUNCATE | 清空表数据(保留结构) | TRUNCATE TABLE user;(比DELETE快,不可回滚) |
| RENAME | 重命名数据库对象 | RENAME TABLE user TO t_user; |
2. DML(Data Manipulation Language):数据操作语言
聚焦于「表中的数据」,相当于“给骨架填肉/修改肉”,只操作数据行,不改变表的结构。
核心特点:
- 操作可回滚(在事务未提交前,用 ROLLBACK 撤销操作,比如误删数据可回滚);
- 执行时仅锁定涉及的数据行(比如 UPDATE 只锁被修改的行,不影响其他行);
- 影响数据库的“内容”,而非“结构”。
常见命令及示例:
| 命令 | 作用 | 示例 |
|---|---|---|
| INSERT | 插入数据 | INSERT INTO user (id, name) VALUES (1, ‘张三’); |
| UPDATE | 修改数据 | UPDATE user SET age = 20 WHERE id = 1; |
| DELETE | 删除数据(保留结构) | DELETE FROM user WHERE id = 1;(可回滚) |
| SELECT | 查询数据 | SELECT * FROM user WHERE id = 1; |
注意:SELECT 常被单独归为 DQL(数据查询语言),但广义上仍属于 DML 范畴。
三、关键补充
- TRUNCATE vs DELETE:
- TRUNCATE 是 DDL,快速清空表(不记录行级日志),不可回滚,会重置自增主键;
- DELETE 是 DML,逐行删除(记录日志),可回滚,不重置自增主键。
- DDL 回滚特例:
部分数据库(如 Oracle、PostgreSQL)支持在事务中执行 DDL,且未提交前可回滚;但 MySQL 中 DDL 执行即自动提交,无法回滚。 - 性能差异:
DDL 操作通常耗时更长(需修改结构+锁对象),DML 操作(除全表扫描)性能更优。
四、总结
- 记结构:DDL 管“骨架”(表/库结构),CREATE/ALTER/DROP 是核心;
- 记数据:DML 管“内容”(表中数据),INSERT/UPDATE/DELETE/SELECT 是核心;
- 记事务:DDL 自动提交,DML 可回滚(核心区分点)。

被折叠的 条评论
为什么被折叠?



