第一章 MySQL架构与历史
1.1 MySQL逻辑架构
- 第一层 连接处理、授权认证、安全等
- 第二层 核心服务功能层,查询解析、分析、优化、缓存以及所有内置函数
- 第三层 存储引擎 数据存储和提取
1.2 并发控制
- 读锁/共享锁、写锁/排他锁
- 锁粒度:表锁(table lock)和行锁(row lock)
1.3 事务
- ACID原则
- 原子性(atomicity):要么全部成功、要么全部失败
- 一致性(consistency):事务未提交,数据不会修改
- 隔离性(isolation):通常事务在未提交前,对其他事务不可见
- 持久性(durability):事务提交后,修改永久保存
- 隔离级别
- READ UNCOMMITTED(读未提交):导致“脏读”,基本没用
- READ COMMITTED(读已提交):大多数数据库默认隔离级别
- REPEATABLE READ(可重复读):MySQL默认隔离级别,同一事务多次读取同样记录保持一致
- SERIALIZABLE(可串行化):最高隔离级别,读取的数据都加锁,实际也很少用
- 死锁
- 死锁检测
- 死锁超时机制(InnoDB解决方案,将持有最少行级排他锁事务回滚)
- 事务日志
- WAL(Wtite-Ahead Logging)预写式日志,顺序IO
- MySQL中的事务
- InnoDB、NDB Cluster支持事务
- MyISAM不支持事务
- 自动提交AUTOCOMMIT,默认打开
- 隐式和显示锁定
1.4 多版本并发控制(MVCC)
- 实现原理:保存数据在某个时间点的快照
- InnoDb的MVCC,每行记录保存两个隐藏列,存放系统版本号
1.5 MySQL的存储引擎
- InnoDB存储引擎:支持事务,最常用、最重要,主要学习
- MyISAM存储引擎:早期默认MySQL存储引擎,不支持事务和行锁,只支持表锁
- 其他存储引擎:不常用
1.6 MySQL时间线
- 版本3.23(2001)真正“诞生”并获得关注
- 版本4.0(2003)
- 版本4.1(2005)
- 版本5.0(2006)
- 版本5.1(2008)
- 版本5.5(2010)Oracle收购SUN后发布的首个版本,本书基于的版本
- 版本5.6(2012)
- 版本5.7(2015)
- 版本5.6(2012)
- 版本5.7(2015)
- 版本8.0(2018) GA版本(Generally Available)