什么是数据库的DDL和DML,有什么区别?
数据库中的 DDL 和 DML 是两类不同的 SQL 语言,用于不同的数据库操作目的。以下是它们的定义、区别和具体说明:
1. DDL(Data Definition Language,数据定义语言)
作用:定义或修改数据库的结构(如创建、删除、修改表、索引、视图等)。
核心命令:
CREATE
:创建数据库对象(如表、索引)。ALTER
:修改现有数据库对象的结构(如添加列)。DROP
:删除数据库对象(如删除表)。TRUNCATE
:清空表数据(保留表结构,属于 DDL,而非 DML)。RENAME
:重命名对象(如表名)。
特点:
- 直接操作数据库的元数据(metadata)。
- 自动提交(执行后立即生效,无法回滚)。
- 通常需要较高权限(如管理员权限)。
示例:
CREATE TABLE Students (id INT PRIMARY KEY,name VARCHAR(50)
);ALTER TABLE Students ADD COLUMN age INT;
2. DML(Data Manipulation Language,数据操作语言)
作用:对数据库中的数据进行增删改查操作。
核心命令:
SELECT
:查询数据。INSERT
:插入新数据。UPDATE
:修改现有数据。DELETE
:删除数据。
特点:
- 操作的是表中的具体数据(记录)。
- 可通过事务(
COMMIT
/ROLLBACK
)控制操作的提交或回滚。 - 普通用户通常具有 DML 权限。
示例:
INSERT INTO Students (id, name) VALUES (1, 'Alice');
UPDATE Students SET age = 20 WHERE id = 1;
DELETE FROM Students WHERE id = 1;
3. DDL 与 DML 的主要区别
对比项 | DDL | DML |
---|---|---|
操作对象 | 数据库结构(表、索引等) | 表中的数据(记录) |
核心命令 | CREATE , ALTER , DROP | SELECT , INSERT , UPDATE , DELETE |
事务支持 | 自动提交,无法回滚 | 支持事务(可提交或回滚) |
执行速度 | 较慢(涉及结构变更) | 较快(仅操作数据) |
权限要求 | 通常需要管理员权限 | 普通用户通常可执行 |
4. 常见误区
TRUNCATE
是 DDL:虽然它清空数据,但通过删除并重建表实现,属于 DDL,而非 DML。SELECT
属于 DML:尽管它不修改数据,但因其属于数据操作范畴,归类为 DML。
5. 总结
- DDL 定义数据库的“骨架”(结构),直接修改元数据,自动提交。
- DML 操作数据库的“血肉”(数据),支持事务,可灵活控制提交或回滚。
理解两者的区别有助于合理设计数据库操作流程和权限管理。