高性能MySql阅读
事务的概念:事务是一组sql语句,一组原子性的sql查询,或者一个独立的工作单元。
事务的四大特性:原子性,一致性,隔离性,持久性
原子性:一个事务被视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。(解决“事务执行中途失败,数据状态不一致”的问题)
一致性:数据库总是从一个一致性的状态转换 到另外一个一致性的状态。保证事务执行前后,数据从库从一个合法状态转移到另一个合法的状态。(解决“事务执行后数据违反业务规则”的问题)
隔离性:通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。因为有隔离级别,所以说是通常说。通过隔离级别控制事务间的可见性,避免脏读、不可重复读、幻读等现象,确保每个事务感觉不到其他事务的并发执行。(解决“多个事务并发执行时的相互干扰问题”)
持久性:解决 “数据库故障(如断电、崩溃)后数据丢失” 的问题。事务提交后,对数据的修改会永久保存到存储介质中,即使系统故障也不会丢失。
四种隔离级别:未提交读,已提交读,可重复读,可串行化
可串行化属于最高的隔离级别,通过强制事务串行执行,避免了事务并发执行可能出现的错误:脏读,不可重复读,幻读。
脏读、不可重复读、幻读是事务在并发执行时可能出现的三类典型错误,属于数据库并发控制需要解决的 “一致性破坏” 问题:
- 脏读:一个事务读取到另一个事务未提交的修改数据。例如事务 A 修改了一条记录但未提交,事务 B 读取了这条未提交的脏数据,之后事务 A 回滚,事务 B 就拿到了无效数据。
- 不可重复读:同一事务内多次读取同一数据,结果不一致。比如事务 A 两次读取同一条记录,期间事务 B 修改并提交了该记录,导致事务 A 两次读取结果不同。
- 幻读:同一事务内多次查询,结果集行数不一致。例如事务 A 查询某条件下的记录数,期间事务 B 插入 / 删除了符合该条件的记录,导致事务 A 再次查询时结果集行数变化(像 “幻觉” 一样)。
这三类问题的严重程度依次递增,而数据库的隔离级别就是通过不同的机制来避免这些错误,隔离级别越高,对这些错误的防范能力越强。

这段事务日志的描述,想说明的是事务执行的结果会记录在事务日志中,对日志的操作比对磁盘操作要快得多,然后再对磁盘中的数据进行修改。
这段描述核心就是在解释 “事务日志如何通过‘预写式日志(Write-Ahead Logging)’机制提升事务效率,并保障数据持久性”,具体可以拆解为以下两点:
1. 日志操作比直接修改磁盘数据更快
事务日志采用追加式的顺序 I/O(在磁盘上的一小块区域连续写入),而直接修改表数据是随机 I/O(磁头需要在磁盘多个位置移动)。因此,“先写日志” 的操作速度远快于 “直接修改磁盘数据”,从而提升了事务的执行效率。
2. 分两步完成数据持久化
- 第一步:存储引擎先修改内存中的数据拷贝,并将 “修改行为” 记录到持久化的事务日志中(这一步是快速的顺序写)。
- 第二步:事务日志持久化后,内存中被修改的数据再后台缓慢刷回磁盘(这一步不影响事务的即时响应)。
这种 “先写日志,再异步刷盘” 的机制,既保证了事务的持久性(日志持久化后,即使系统崩溃也能恢复数据),又通过 “顺序写日志 + 异步刷盘” 的方式大幅提升了事务执行效率。
