MySql数据库设计

一、五大分类总览
分类 英文全称 中文含义 核心作用
DDL Data Definition Language 数据定义语言 定义、修改数据库结构
DML Data Manipulation Language 数据操作语言 插入、修改、删除数据
DQL Data Query Language 数据查询语言 查询数据
DCL Data Control Language 数据控制语言 管理用户权限
TCL Transaction Control Language 事务控制语言 控制事务提交、回滚
可以这样记忆:

DDL:定义结构

CREATE、ALTER、DROP、TRUNCATE

DML:操作数据

INSERT、UPDATE、DELETE

DQL:查询数据

SELECT

DCL:控制权限

GRANT、REVOKE

TCL:控制事务

COMMIT、ROLLBACK、SAVEPOINT

二、DDL:数据定义语言
DDL(Data Definition Language)主要用于创建和修改数据库对象,例如数据库、表、索引等。

常见命令:
命令 作用
CREATE 创建数据库对象
ALTER 修改数据库对象结构
DROP 删除数据库对象
TRUNCATE 清空表中的所有数据
示例:
-- 创建用户表
CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(50),
age INT
);

-- 添加邮箱字段
ALTER TABLE user
ADD COLUMN email VARCHAR(100);

-- 清空表数据,保留表结构
TRUNCATE TABLE user;

-- 删除整张表
DROP TABLE user;

重点区别:

  • DELETE:删除数据行,可以通过 WHERE 指定条件。
  • TRUNCATE:清空整张表的数据。
  • DROP:删除整张表,包括表结构。
    在 MySQL 中,DDL 通常会引起隐式提交,不能简单认为可以通过 ROLLBACK 恢复。执行生产环境 DDL 前需要谨慎。
    三、DML:数据操作语言
    DML(Data Manipulation Language)用于新增、修改和删除表中的数据。

常见命令:

  • INSERT:插入数据。
  • UPDATE:修改数据。
  • DELETE:删除数据。
    示例:
    -- 新增用户
    INSERT INTO user (id, name, age)
    VALUES (1, '张三', 25);

-- 修改用户年龄
UPDATE user
SET age = 26
WHERE id = 1;

-- 删除指定用户
DELETE FROM user
WHERE id = 1;

生产开发注意:
UPDATE user SET age = 26;

这条 SQL 没有 WHERE,会修改表中所有用户的年龄。

同样,执行没有 WHERE 的 DELETE 会删除全表数据。实际开发中要特别注意条件、事务边界和数据备份。
四、DQL:数据查询语言
DQL(Data Query Language)主要用于查询数据,核心命令是 SELECT。

示例:
-- 查询所有用户
SELECT * FROM user;

-- 条件查询
SELECT id, name, age
FROM user
WHERE age > 25;

-- 排序
SELECT *
FROM user
ORDER BY age DESC;

-- 分组统计
SELECT age, COUNT(*) AS total
FROM user
GROUP BY age;

高级开发还需要掌握:

  • 多表关联:JOIN
  • 聚合查询:COUNT、SUM、AVG
  • 分组过滤:GROUP BY、HAVING
  • 子查询、CTE
  • 索引与执行计划:EXPLAIN
  • 分页查询与深分页优化
    高级开发的重点不是只会写 SELECT,而是能够分析执行计划、定位慢 SQL、设计索引并优化查询性能。
    五、DCL:数据控制语言
    DCL(Data Control Language)主要用于管理数据库用户的访问权限。

常见命令:

  • GRANT:授予权限。
  • REVOKE:撤销权限。
    示例:
    -- 授予用户查询权限
    GRANT SELECT ON mydb.user
    TO 'app_user'@'%';

-- 撤销查询权限
REVOKE SELECT ON mydb.user
FROM 'app_user'@'%';

实际使用中,应根据 MySQL 版本、用户创建方式和权限配置执行相应语句。

生产环境原则:最小权限。 应用账号通常只授予完成业务所需的权限,不应随意授予 DROP、GRANT OPTION 等高危权限。
六、TCL:事务控制语言
TCL(Transaction Control Language)用于控制事务的执行过程,保证事务操作符合业务要求。

常见命令:
命令 作用
START TRANSACTION 开启事务
COMMIT 提交事务
ROLLBACK 回滚事务
SAVEPOINT 创建事务保存点
ROLLBACK TO SAVEPOINT 回滚到指定保存点
示例:银行转账。
START TRANSACTION;

-- A 账户扣款
UPDATE account
SET balance = balance - 100
WHERE id = 1;

-- B 账户收款
UPDATE account
SET balance = balance + 100
WHERE id = 2;

-- 两条 SQL 都成功,提交事务
COMMIT;

如果执行过程中发生异常,应根据事务状态和业务处理逻辑执行 ROLLBACK,避免只完成扣款而没有完成收款。

Java Spring Boot 中通常通过 @Transactional 管理事务:
@Transactional(rollbackFor = Exception.class)
public void transfer() {
accountMapper.deduct(1L, 100);
accountMapper.deposit(2L, 100);
}

需要注意:@Transactional 的生效还取决于代理调用方式、事务管理器和数据库引擎等条件。
七、容易混淆的三个知识点
对比 核心区别
DDL vs DML DDL 管结构,DML 操作数据
DML vs DQL DML 修改数据,DQL 查询数据
DCL vs TCL DCL 管权限,TCL 管事务
另外,这五类是常见的教学分类,并不是所有数据库都严格按同一种方式划分。例如,SELECT 在一些分类体系中会归入广义 DML;MySQL 中 BEGIN、START TRANSACTION、COMMIT、ROLLBACK 等事务语句的具体支持与行为也有数据库特性差异。

如果你是按高级 Java 后端开发的方向学习数据库,建议下一步重点学习:事务与隔离级别、MVCC、锁机制、索引原理、执行计划、慢 SQL 优化。这些知识比单纯记住 SQL 分类更能体现数据库实战能力。

posted @ 2026-10-19 13:34  程序小小猿  阅读(2)  评论(0)    收藏  举报