关系型数据库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';
    • (在某些数据库中还包括 COMMITROLLBACK,但 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
是否可回滚 不可(自动提交) 可以(事务内可回滚) 不可(权限变更即时生效)
使用场景 创建表、修改表结构 添加数据、查询记录 分配权限、管理用户