关系型数据库ddl/dml/dcl区别及例子
在 MySQL(以及其他关系型数据库)中,DDL、DML 和 DCL 是 SQL 语言的三大类操作,它们分别负责不同的功能。
1. DDL(Data Definition Language,数据定义语言)
- 定义:DDL 用于定义和管理数据库结构或模式(schema)的语句,主要涉及数据库对象(如表、视图、索引等)的创建、修改和删除。
- 特点:
- 操作的对象是数据库的结构,而不是数据本身。
- DDL 操作通常是永久性的,执行后会自动提交(隐式提交),无法回滚。
- 常见命令:
CREATE
:创建数据库或表,例如CREATE TABLE students (id INT, name VARCHAR(50));
ALTER
:修改已有对象的结构,例如ALTER TABLE students ADD COLUMN age INT;
DROP
:删除对象,例如DROP TABLE students;
TRUNCATE
:清空表数据但保留结构,例如TRUNCATE TABLE students;
- 示例:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100)
);
2. DML(Data Manipulation Language,数据操作语言)
- 定义:DML 用于操作数据库中的数据,主要包括数据的增删改查。
- 特点:
- 操作的对象是表中的数据,而不是表的结构。
- DML 操作可以回滚(在事务中),需要手动提交(如
COMMIT
)或回滚(如ROLLBACK
)。
- 常见命令:
INSERT
:插入数据,例如INSERT INTO students (id, name) VALUES (1, 'Alice');
UPDATE
:更新数据,例如UPDATE students SET name = 'Bob' WHERE id = 1;
DELETE
:删除数据,例如DELETE FROM students WHERE id = 1;
SELECT
:查询数据,例如SELECT * FROM students;
(注:有些人将SELECT
单独归为 DQL - Data Query Language,但通常仍归在 DML 中)。
- 示例:
INSERT INTO employees (id, name) VALUES (1, ‘John’);
UPDATE employees SET name = ‘Jane’ WHERE id = 1;
3. DCL(Data Control Language,数据控制语言)
- 定义:DCL 用于定义访问权限和安全级别,控制用户对数据库的访问。
- 特点:
- 操作的是权限和用户访问控制,而不是数据或结构。
- 通常由数据库管理员使用。
- 常见命令:
GRANT
:授予权限,例如GRANT SELECT ON employees TO 'user1';
REVOKE
:撤销权限,例如REVOKE SELECT ON employees FROM 'user1';
- (在某些数据库中还包括
COMMIT
和ROLLBACK
,但 MySQL 中事务控制常归为 TCL - Transaction Control Language)。
- 示例:
GRANT ALL PRIVILEGES ON employees TO ‘admin‘@’localhost’;
REVOKE INSERT ON employees FROM ‘user1‘@’localhost’;
DDL、DML 和 DCL 的区别
特性 | DDL(数据定义语言) | DML(数据操作语言) | DCL(数据控制语言) |
---|---|---|---|
作用 | 定义数据库结构 | 操作数据库中的数据 | 控制访问权限 |
操作对象 | 表、数据库等结构 | 表中的数据 | 用户权限 |
常见命令 | CREATE, ALTER, DROP | INSERT, UPDATE, DELETE, SELECT | GRANT, REVOKE |
是否可回滚 | 不可(自动提交) | 可以(事务内可回滚) | 不可(权限变更即时生效) |
使用场景 | 创建表、修改表结构 | 添加数据、查询记录 | 分配权限、管理用户 |