[数据库] MySQL 数据库系统学习总结:从入门到进阶的完整知识梳理

111 0
Honkers 昨天 00:35 来自手机 | 显示全部楼层 |阅读模式

前言

经过一个学期的 MySQL 数据库课程学习,我系统地掌握了从数据库基础概念到高级应用的完整知识体系。从最开始的 SQL 基础语法,到后来的索引优化、事务管理、存储过程,每一个知识点都让我对数据库有了更深的理解。

这篇文章是我对本学期所学内容的全面梳理和总结,既是对知识的复习巩固,也是对学习过程的反思和沉淀。希望通过这篇文章,能够帮助自己建立完整的知识体系,同时也能给正在学习 MySQL 的同学一些参考。


一、数据库基础与环境搭建

1.1 数据库的基本概念

在正式学习 SQL 之前,首先要理解数据库是什么。简单来说,数据库就是一个存储数据的仓库,它能够高效地存储、管理和检索数据。

为什么要用数据库而不是 Excel?

  • 数据量大:数据库能存储千万级甚至亿级数据,Excel 最多几百万行
  • 并发访问:数据库支持多人同时操作,Excel 做不到
  • 数据安全:数据库有权限控制、备份恢复等机制
  • 查询速度快:通过索引等技术,数据库查询速度比 Excel 快得多

常见的数据库类型:

  • 关系型数据库:MySQL、Oracle、SQL Server(用表存数据,表与表之间有关系)
  • 非关系型数据库:Redis、MongoDB(存储格式灵活,适合特定场景)

1.2 MySQL 的安装与配置

MySQL 是最流行的开源关系型数据库,学习数据库一般从 MySQL 入门。

安装注意事项:

  • 端口号默认是 3306,没有特殊需求不要改
  • 字符集一定要选 utf8mb4,支持完整的 Unicode 包括 emoji
  • root 密码一定要记住,忘记了会很麻烦

配置文件 my.ini/my.cnf 的几个重要参数:

  • port:端口号,默认 3306
  • character-set-server:服务器字符集,建议设为 utf8mb4
  • default-storage-engine:默认存储引擎,一般是 InnoDB
  • max_connections:最大连接数,根据服务器配置调整

1.3 存储引擎的选择

MySQL 有多种存储引擎,最常用的是 InnoDB 和 MyISAM。

学习心得: 现在基本都用 InnoDB,它是 MySQL 的默认存储引擎,支持事务和行级锁,适合绝大多数业务场景。MyISAM 已经逐渐被淘汰,了解一下就行。


二、SQL 基础语法

2.1 SQL 语言分类

SQL(结构化查询语言)是操作数据库的标准语言,按功能可以分为四大类:

  1. DDL(数据定义语言):定义数据库结构,如 CREATE、ALTER、DROP
  2. DML(数据操作语言):操作数据,如 INSERT、UPDATE、DELETE
  3. DQL(数据查询语言):查询数据,如 SELECT
  4. DCL(数据控制语言):权限控制,如 GRANT、REVOKE

2.2 DDL 数据定义语言

创建数据库:

创建表:

建表规范总结:

  • 表名、字段名用小写,多个单词用下划线分隔
  • 每个字段都要有 COMMENT 注释
  • 主键一般用自增 ID
  • 字符串类型区分定长(CHAR)和变长(VARCHAR)
  • 日期时间用 DATE、DATETIME 类型,不要用字符串

修改表结构:

删除表:

⚠️ 易错点:

  • DROP 操作要慎重,删除后数据就没了
  • 生产环境修改表结构要小心,大表 ALTER 会锁表
  • 字段类型修改可能导致数据截断或丢失

2.3 DML 数据操作语言

插入数据:

更新数据:

删除数据:

⚠️ 最容易犯的错误:

UPDATE 和 DELETE 一定要加 WHERE 条件!

刚学 SQL 的时候,很多人会忘记加 WHERE,导致全表数据被修改或删除。这是非常严重的事故。

安全建议:

  1. 执行 UPDATE/DELETE 前,先用 SELECT 查询确认条件
  2. 重要数据操作前先备份
  3. 生产环境开启事务,确认无误后再提交

2.4 DQL 数据查询语言

查询是 SQL 中最常用也是最重要的部分。

基础查询:

条件查询:

排序查询:

分页查询:

分页公式: 第 n 页,每页 m 条 → LIMIT (n-1)*m, m

聚合函数:

分组查询:

WHERE 和 HAVING 的区别:

  • WHERE:分组前筛选,不能用聚合函数
  • HAVING:分组后筛选,可以用聚合函数

三、高级查询

3.1 多表连接查询

实际开发中,数据往往分散在多个表中,需要关联查询。

内连接(INNER JOIN): 只返回两个表中匹配的数据

左连接(LEFT JOIN): 返回左表全部数据,右表匹配不到的显示 NULL

右连接(RIGHT JOIN): 与左连接相反,用得较少

连接查询注意事项:

  • 一定要写连接条件,否则会产生笛卡尔积(数据量爆炸)
  • 多表查询时给表起别名,SQL 更简洁
  • 连接的表越多,性能越差,一般不超过 3-5 个表

3.2 子查询

子查询就是嵌套在另一个查询中的查询。

子查询分类:

  • 标量子查询:返回单个值
  • 列子查询:返回一列
  • 行子查询:返回一行
  • 表子查询:返回多行多列

⚠️ 注意: 子查询虽然方便,但性能往往不如连接查询,特别是子查询在 WHERE 条件中且数据量大的时候。实际开发中要谨慎使用。


四、数据类型与运算符

4.1 常用数据类型

数值类型:

  • TINYINT:1 字节,范围 - 128~127(存年龄、状态等小数字)
  • INT:4 字节,范围约 - 21 亿~21 亿(最常用)
  • BIGINT:8 字节,范围很大(存主键、订单号等)
  • DECIMAL(M,D):精确小数,存金额必须用这个

字符串类型:

  • CHAR(n):定长字符串,最多 255 字符(存性别、手机号等固定长度)
  • VARCHAR(n):变长字符串,最多 65535 字节(存姓名、地址等)
  • TEXT:长文本,最多 65535 字符(存文章内容等)

日期时间类型:

  • DATE:日期,格式 YYYY-MM-DD
  • TIME:时间,格式 HH:MM:SS
  • DATETIME:日期时间,格式 YYYY-MM-DD HH:MM:SS
  • TIMESTAMP:时间戳,范围小但有时区特性

类型选择原则:

  1. 在满足需求的前提下,尽量选小的类型
  2. 整数优先于字符串(存手机号用 BIGINT 比 VARCHAR 快)
  3. 金额用 DECIMAL,绝对不能用 FLOAT/DOUBLE
  4. 日期时间用专门的类型,不要用字符串

4.2 常用运算符

算术运算符: +、-、*、/、%(取模)

比较运算符: =、!=、>、<、>=、<=

逻辑运算符: AND、OR、NOT

特殊运算符:

  • BETWEEN...AND...:在范围内
  • IN:在指定值列表中
  • LIKE:模糊匹配
  • IS NULL:判断是否为空

五、常用函数

MySQL 提供了很多内置函数,方便我们处理数据。

5.1 字符串函数
5.2 日期函数

5.3 数值函数

学习心得: 函数不用死记硬背,常用的自然就记住了,不常用的用到了再查文档。关键是要知道有哪些功能,遇到需求时知道可以用函数解决。


六、索引

索引是数据库优化最重要的手段之一,也是这学期的重点和难点。

6.1 什么是索引?

索引就像书的目录。没有索引,查数据要一页一页翻(全表扫描);有了索引,直接通过目录定位到位置(索引查找)。

索引的优点:

  • 大大提高查询速度
  • 加速表与表的连接
  • 提高分组和排序的效率

索引的缺点:

  • 占用额外的存储空间
  • 插入、更新、删除数据时要维护索引,变慢
  • 不是索引越多越好

6.2 索引的类型

  • 普通索引(INDEX):最基本的索引
  • 唯一索引(UNIQUE):索引列的值必须唯一
  • 主键索引(PRIMARY KEY):特殊的唯一索引,一个表只能有一个
  • 联合索引:多个字段组成的索引
  • 全文索引(FULLTEXT):用于全文搜索

6.3 索引的使用

6.4 最左前缀原则

联合索引遵循最左前缀原则,这是索引优化的核心。

比如有联合索引 idx(a, b, c):

  • ✅ WHERE a = 1 走索引
  • ✅ WHERE a = 1 AND b = 2 走索引
  • ✅ WHERE a = 1 AND b = 2 AND c = 3 走索引
  • ❌ WHERE b = 2 不走索引
  • ❌ WHERE c = 3 不走索引
  • ❌ WHERE b = 2 AND c = 3 不走索引

简单说:必须从最左边的列开始,不能跳过中间的列。

6.5 索引失效的常见情况

  1. 联合索引不满足最左前缀原则
  2. 在索引列上使用函数、运算
  3. 隐式类型转换(比如字符串和数字比较)
  4. LIKE 以 % 开头
  5. 使用 OR 连接的条件中有非索引列
  6. 数据量太小,MySQL 觉得全表扫描更快

6.6 EXPLAIN 分析执行计划

判断 SQL 有没有走索引,用 EXPLAIN:

七、事务

7.1 什么是事务?

事务是一组 SQL 操作,要么全部成功,要么全部失败。最经典的例子就是银行转账:A 扣钱和 B 加钱必须同时成功或同时失败。

7.2 事务的四大特性(ACID)

  1. 原子性(Atomicity):事务是不可分割的最小单位,要么全成功要么全失败
  2. 一致性(Consistency):事务执行前后,数据保持一致
  3. 隔离性(Isolation):多个事务之间互不干扰
  4. 持久性(Durability):事务提交后,数据就永久保存了

7.3 事务的使用
7.4 事务的隔离级别

MySQL 默认隔离级别是可重复读(REPEATABLE READ)。

几个概念解释:

  • 脏读:一个事务读到了另一个事务未提交的数据
  • 不可重复读:同一个事务内,两次读取同一条数据结果不一样(被别的事务修改了)
  • 幻读:同一个事务内,两次查询的行数不一样(别的事务插入 / 删除了数据)

学习心得: 事务是数据库的核心概念,也是面试常考题。ACID 四大特性要背熟,隔离级别要理解清楚。实际开发中,涉及多个写操作的业务一定要用事务,保证数据一致性。


八、视图、存储过程与触发器

8.1 视图

视图就是一张虚拟的表,它的数据来自于查询结果。

视图的作用:

  • 简化复杂的查询
  • 保护数据,只暴露部分字段给用户
  • 数据独立性,表结构变了不影响视图

8.2 存储过程

存储过程是一组预编译的 SQL 语句,存在数据库中,可以重复调用。

存储过程的优缺点:

  • 优点:执行速度快(预编译)、减少网络传输、代码复用
  • 缺点:调试困难、可移植性差、维护成本高

学习心得: 存储过程在传统企业系统中用得比较多,但现在互联网公司用得越来越少,因为不好维护和扩展。了解基本用法就行,实际开发中一般把业务逻辑放在应用层。

8.3 触发器

触发器是在表发生增删改操作时,自动触发执行的一段 SQL。

触发器的注意事项:

  • 触发器会增加数据库的复杂度
  • 出了问题不好排查
  • 可能导致意外的连锁反应

学习心得: 触发器功能强大但要慎用,特别是在高并发场景下,容易引起性能问题和死锁。能用应用代码实现的,尽量不要用触发器。


九、用户与权限管理

9.1 创建用户

9.2 授权

9.3 撤销权限

9.4 权限管理原则

  1. 最小权限原则:只给用户需要的权限,不给多余的
  2. 禁止 root 直连:root 账号只用于管理,业务不用
  3. 限制登录 IP:生产环境不要用 %,限制内网 IP
  4. 定期清理:不用的账号及时删除

十、学习总结与反思

10.1 学习收获

经过一个学期的学习,我收获了很多:

知识层面:

  • 建立了完整的 MySQL 知识体系,从基础到进阶都有了系统的了解
  • 掌握了 SQL 的基本语法,能够独立完成常见的增删改查
  • 理解了索引、事务等核心概念,知道了怎么优化数据库
  • 学会了视图、存储过程、触发器等高级特性

能力层面:

  • 能够根据业务需求设计合理的表结构
  • 能够写出规范、高效的 SQL 语句
  • 能够用 EXPLAIN 分析 SQL 性能,进行简单的优化
  • 有了基本的数据库安全意识

10.2 学习中的困难

学习过程中也遇到了不少困难:

  1. 索引优化比较抽象:最左前缀原则、索引失效场景,一开始不太好理解,需要多做练习
  2. 事务隔离级别容易混淆:四个隔离级别、三种读问题,概念多,容易记混
  3. 多表查询容易写错:表多了之后,连接条件、别名容易搞混
  4. 高级特性用得少:存储过程、触发器这些,课堂上学了但实际用得不多,掌握不牢

10.3 需要加强的部分

通过这次总结,我发现自己还有很多需要加强的地方:

  1. SQL 优化能力:只会基础的索引优化,复杂 SQL 的优化能力还不够
  2. 实战经验不足:都是课堂练习,没有在真实项目中应用过
  3. 数据库运维知识欠缺:备份恢复、主从复制、性能监控这些还没接触
  4. 高级特性不熟练:存储过程、触发器、事件这些用得太少

10.4 后续学习计划

针对以上不足,我制定了后续的学习计划:

  1. 多做实战项目:找一些练手项目,把学到的知识用起来
  2. 深入学习优化:多看 SQL 优化的文章和案例,提升优化能力
  3. 学习运维知识:了解备份、主从、监控等 DBA 基础知识
  4. 了解 NoSQL:学习 Redis、MongoDB 等非关系型数据库,拓宽视野

结语

一个学期的 MySQL 课程结束了,但数据库的学习才刚刚开始。数据库是后端开发的基本功,需要不断地学习和实践才能真正掌握。

回顾这学期的学习,从最开始连 SELECT 都写不对,到现在能够独立设计表、写复杂查询、做基本优化,进步还是很明显的。但我也清楚地知道,自己掌握的还只是皮毛,还有很多东西需要学习。

最后,感谢老师的悉心教导。在今后的学习中,我会继续努力,把数据库这门基本功练扎实,为以后的开发工作打下坚实的基础。


全文完,感谢阅读!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行