MySQL简明教程(草稿)

1. MySQL 的发展历史

MySQL 是一个开源关系型数据库,由瑞典 MySQL AB 公司开发,后被 Sun 公司收购(2008),最终被 Oracle 公司收购(2009),发展历史如下。

时间 版本 事件
1995 - 第一个内部版本发布,支持基本的 SQL 功能。
1995 3.11 MySQL 正式发布(版本 3.11),最初仅支持简单的表操作。
2001 - 成立 MySQL AB 公司,提供商业支持和增值服务(如企业版)
2003 4.0 支持事务(InnoDB 引擎)、UNION 查询。
2004 4.1 支持子查询、UTF-8 字符集。
2005 5.0 引入存储过程、触发器、视图、游标等高级功能。
2008 5.1 发布,支持分区表、事件调度器。
2008 - Sun Microsystems 以 10亿美元 收购 MySQL AB,推动进一步开源化。
2009 - Oracle 收购 Sun Microsystems,间接控制 MySQL,MariaDB 诞生。
2010 5.5 默认启用 InnoDB 引擎,优化性能和复制功能。
2013 5.6 改进全文检索、NoSQL 接口(Memcached API)、GTID 复制。
2013 5.7 支持 JSON 数据类型、多源复制、性能大幅提升。
2018 8.0 MySQL 发布模式变为:创新(Innovation)版本和 LTS 版本。
2024 8.4 第一个 LTS 出现。
- 9.0 正在开发中。

8.0 开始变更的发布模式如下图:

2. 数据库设计范式

数据库设计范式是一组规范化的指导原则,用于减少数据冗余和提高数据完整性。

3. 数据库的基本操作

4. 数据表的基本操作

5. 数据类型和运算符

6. 查询

7. 增删改

8. 存储过程和函数

9. 视图

10. 触发器

11. MySQL 权限控制

12. MySQL 日志

13. 性能优化

13.1 操作系统和硬件优化

一般来说,服务器的硬件我们主要关注三个方面,CPU、内存和磁盘。

  1. CPU如果持续保持使用率100%,那必然会有一些数据库连接或处理产生较大的延迟,进而影响到业务。
  2. 如果由于内存不足,而导致数据库必须要硬盘中获取数据,那性能开销是非常大的,因为磁盘和内存的访问速度完全不在一个数量级上。所以一个大内存是必要的。
  3. 对于硬盘来说,SSD通常比HDD快10-20倍,所以应当优先选用固态硬盘而不是机械硬盘。

13.2 索引优化

索引,在MySQL中也叫作键(key),是存储引擎用于快速找到记录的一种数据结构。 索引的本质就是拿空间换时间,索引就好比一本书的目录部分,当你查找内容的时候会先检索目录部分,而不是去全本逐页翻看,得到页码后直接翻到对应的页码,由于目录部分比较少,所以查找比较快,。但是由于目录部分也会占用一部分纸张(对应于计算机的存储),所以相当于是拿一部分纸张来换取快速查找的体验。

13.3 查询性能优化

1. 优化数据访问

是否向数据库请求了不需要的数据?

如果一个查询性能很差,最常见的原因是访问的数据太多,比如我们只需要查询一个用户表的姓名和性别,但是却使用了 select * 语法,导致查询变慢。

2. 重构查询的方式

是否可以切分查询?

以删除历史数据为例,如果一次性删除过多的数据,可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。如果这时将一个大的DELETE语句切分成多个较小的查询则可以尽可能小的影响MySQL的性能。

3. 优化联接查询

  • 确保ON或USING子句中的列上有索引。一般来说,只需在联接顺序的第二个表的相应列上创建索引。
  • 确保任何 GROUP BYORDER BY 中的表达式只涉及到一个表中的列。

14. 数据备份与恢复

15. MySQL 主从复制

主从同步开始的前提是要同步的数据库或数据表,在主从服务器上的状态是一致的,所以需要先手动同步。

  1. 主库开启binlog,设置server_id
  2. 主库数据导出,写入从库
  3. 从库设置server_id,master_info(地址,账密,同步位置),启动replica
  4. 完成主从配置。

如果从库数据修改导致失败,需要先 stop replica; 然后手动修正数据,reset slave清除从库位置信息,change master to 重新设置位置,然后start replica即可。

updatedupdated2026-02-052026-02-05