- MySQL逻辑架构
- 连接层:请求到来经过TCP三次握手后建立连接成功,然后需要进行鉴权
- Server层:sql语句解析优化(选择索引)然后交给存储引擎层执行,mysql8以后查询缓存被放弃
- 存储引擎层:类似于插件,实现了mysql的存储引擎标准,然后和文件系统交互
-
对比项
MyISAM
InnoDB
主外键
不支持
支持
事务
不支持
支持
行表锁
表锁
不适合高并发
行锁
适合高并发
缓存
只缓存索引
缓存索引和真实数据,对内存要求较高,且内存大小对性能有决定性影响
表空间
小
大
关注点
性能
事务
-
- MySQL的目录和文件
- 表在文件系统中的表示
- .frm文件专门描述表结构
- InnoDB如何存储表数据的
- 会把表数据放到表空间,对应表中一个或多个真实文件
- 表空间分为系统表空间和独立表空间,目前新版本都是有多少个表就有多少个独立表空间
- 独立表空间在数据库对应文件夹,.ibd文件就是独立表空间
- 常见日志文件
- 错误日志mysql的log/error.log
- 慢查询日志slow:会配置到时间阈值,超过阈值的语句都会记录到日志中
- 查询日志
- 二进制文件bin log:对mysql数据库执行更改的所有操作
- 表在文件系统中的表示
- MySQL的系统库
- performance_schema:监控mysql运行中的一些状态信息,比如执行时间
- sys:数据来源于performance和information的聚合,提供给DBA查询问题,比如慢查询sql
- information_schema:MySQL数据库的元数据的数据库
- mysql:统计信息表
- 数据库事务
- 事务是数据库执行过程中的一个不可再分割逻辑单位,由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要不全部成功,要不全部不成功
- 原子性:事务不可再分割,要么全部成功,要么全部失败
- 一致性:在事务开始前后,数据的总体一致性没有被破坏
- 持久性:让事务提交后所做的修改会永久保存到数据库
- 隔离性:多个事务并发执行时,事务内部操作不能被其他线程影响,否则会出现数据脏读、幻读等情况
- 脏读:事务读到了另一个事务修改但未提交的数据
- 不可重复读:事务内相同记录被检索两次,两次得到的结果不同,和脏读不同是另一个事务已提交
- 幻读:事务执行过程中,另一个事务将新记录添加到正在读取的事务中时,和不可重复区别是返回多条
- 事务执行过程中,另一个事务将新记录删除并提交事务操作数据,SQL92认为是幻读,MySQL认为发生了被删除记录的不可重复
-
隔离级别
脏读
不可重复读
幻读
READ UNCOMMITTED
未提交读
可能
可能
可能
READ COMMITTED
已提交读
-
可能
可能
REPEATABLE READ
可重复读
-
-
——