数据库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'@'%';
相关推荐
迷枫71210 小时前
达梦数据库的体系架构
数据库·oracle·架构
夜晚打字声11 小时前
9(九)Jmeter如何连接数据库
数据库·jmeter·oracle
Chasing__Dreams11 小时前
Mysql--基础知识点--95--为什么避免使用长事务
数据库·mysql
NineData11 小时前
NineData 智能数据管理平台新功能发布|2026 年 3 月
数据库·oracle·架构·dba·ninedata·数据复制·数据迁移工具
小陈工11 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
❀͜͡傀儡师11 小时前
k8s部署的Nexus 3 数据库损坏恢复指南:从删除损坏数据库到完整数据重建
数据库·kubernetes·nexus3
StackNoOverflow12 小时前
Spring Security权限控制框架详解
java·数据库·sql
不愿透露姓名的大鹏12 小时前
Oracle归档日志爆满急救指南
linux·数据库·oracle·dba
a里啊里啊13 小时前
Redis面试题记录
数据库·redis·缓存
数据知道13 小时前
claw-code 源码分析:OmX `$team` / `$ralph`——把 AI 辅助开发从偶发灵感变成可重复流水线
数据库·人工智能·mysql·ai·claude code·claw code