数据库DDL、DML、DQL、DCL详解

一、DDL、DML、DQL、DCL介绍

分类 全称 中文含义 核心作用 类比(生活场景)
DDL Data Definition Language 数据定义语言 定义 / 修改数据库、表的结构 装修房子(拆墙、砌墙、改格局)
DML Data Manipulation Language 数据操纵语言 增删改表中的数据 往柜子里放 / 拿 / 改东西
DQL Data Query Language 数据查询语言 从表中查询数据 从柜子里找东西
DCL Data Control Language 数据控制语言 管理数据库的权限、事务 给家人分配房间钥匙 / 锁门

二、主要区别

  • DDL 管结构:CREATE/ALTER/DROP,操作数据库 / 表的「骨架」,执行后不可回滚;
  • DML 管数据:INSERT/UPDATE/DELETE,操作表中的「内容」,可通过事务回滚;
  • DQL 查数据:SELECT 是核心,只读不写,新手最常接触;
  • DCL 管权限:GRANT/REVOKE,主要用于用户和权限管理,多由 DBA 操作。

三、逐类详解

1. DDL(数据定义语言)

核心:操作「数据库 / 表的结构」,而非数据本身,比如创建表、删除库、修改字段类型。

  • 常用关键字:CREATE(创建)、ALTER(修改)、DROP(删除)、TRUNCATE(清空表结构 + 数据)
  • 特点:执行后会自动提交,无法用 ROLLBACK 回滚(除非数据库配置特殊)。

实战例子(MySQL 环境)

复制代码
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS test_db; -- 避免重复创建报错

-- 2. 使用该数据库
USE test_db;

-- 3. 创建表(核心DDL操作)
CREATE TABLE IF NOT EXISTS user (
    id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增
    name VARCHAR(50) NOT NULL,        -- 姓名,非空
    age INT DEFAULT 18,               -- 年龄,默认18
    create_time DATETIME DEFAULT NOW() -- 创建时间,默认当前时间
);

-- 4. 修改表结构(添加字段)
ALTER TABLE user ADD COLUMN phone VARCHAR(11) AFTER name;

-- 5. 修改字段类型(把age的INT改成TINYINT)
ALTER TABLE user MODIFY COLUMN age TINYINT DEFAULT 18;

-- 6. 删除表
DROP TABLE IF EXISTS user;

-- 7. 清空表(删除所有数据,重置自增,属于DDL)
TRUNCATE TABLE user;
2. DML(数据操纵语言)

核心:操作「表中的数据」,比如新增一条用户记录、修改年龄、删除无效数据。

  • 常用关键字:INSERT(新增)、UPDATE(修改)、DELETE(删除)
  • 特点:执行后默认不会自动提交(需手动 COMMIT),未提交前可 ROLLBACK 回滚。

实战例子

复制代码
-- 先确保有user表(参考上面DDL的CREATE TABLE)
USE test_db;

-- 1. 新增数据(INSERT)
INSERT INTO user (name, phone, age) 
VALUES ('张三', '13800138000', 25), -- 批量插入多条
       ('李四', '13900139000', 30);

-- 2. 修改数据(UPDATE,务必加WHERE,否则改全表!)
UPDATE user SET age = 26 WHERE name = '张三';

-- 3. 删除数据(DELETE,务必加WHERE!)
DELETE FROM user WHERE name = '李四';

-- 4. 提交/回滚(事务控制)
COMMIT; -- 确认修改
-- ROLLBACK; -- 撤销修改
3. DQL(数据查询语言)

核心:从表中「查询 / 检索数据」,是日常使用频率最高的 SQL,也是最灵活的。

  • 唯一核心关键字:SELECT(搭配 FROM/WHERE/GROUP BY/ORDER BY 等)
  • 特点:只查询数据,不修改任何内容,无副作用。

实战例子

复制代码
USE test_db;

-- 1. 查询所有字段(* 不推荐,生产环境指定字段)
SELECT * FROM user;

-- 2. 查询指定字段+条件
SELECT name, age FROM user WHERE age > 20;

-- 3. 排序+限制条数
SELECT name, phone FROM user ORDER BY age DESC LIMIT 10;

-- 4. 分组+聚合(统计各年龄段人数)
SELECT age, COUNT(*) AS user_count FROM user GROUP BY age;
4. DCL(数据控制语言)

核心:管理数据库的「权限 / 事务」,主要由 DBA(数据库管理员)使用,新手接触较少。

  • 常用关键字:GRANT(授权)、REVOKE(撤销权限)、COMMIT(提交事务)、ROLLBACK(回滚)、CREATE USER(创建用户)
  • 特点:针对「用户 / 权限」操作,而非数据 / 表结构。

实战例子

复制代码
-- 1. 创建数据库用户
CREATE USER 'test_user'@'%' IDENTIFIED BY '123456'; -- % 允许远程访问

-- 2. 授权(给test_user授予test_db所有表的增删改查权限)
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'%';

-- 3. 刷新权限(生效授权)
FLUSH PRIVILEGES;

-- 4. 撤销权限
REVOKE DELETE ON test_db.* FROM 'test_user'@'%';

-- 5. 删除用户
DROP USER 'test_user'@'%';
相关推荐
6+h2 小时前
【Redis】缓存问题及解决方案
数据库·redis·缓存
always_TT2 小时前
字符串输入:gets vs fgets(安全问题)
数据库·安全
我科绝伦(Huanhuan Zhou)2 小时前
【生产案例】MySQL InnoDB 数据损坏崩溃修复
数据库·mysql·adb
猹叉叉(学习版)2 小时前
【系统分析师_知识点整理】 3.数据库系统
数据库·笔记·软考·系统分析师
6+h3 小时前
【Redis】高可用核心讲解
数据库·redis·缓存
海棠蚀omo3 小时前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql
鸽芷咕3 小时前
告别迁移焦虑:KingbaseES如何搞定Oracle复杂的层次查询与伪列?
数据库·oracle
当代红领巾3 小时前
Oracle 中的物理备份
数据库·oracle