1 事务基础
确保一组数据库操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。
- **原子性(Atomicity):**确保事务中的所有操作要么全部完成,要么全部不完成。
- **一致性(Consistency):**在事务执行之前和执行之后,数据始终处于⼀致的状态。
- **隔离性(Isolation):**指的是并发执⾏的两个事务之间互不⼲扰。
- **持久性(Durability):**持久性确保事务一旦提交,其结果将永久保存在数据库中,即使系统崩溃也不会丢失。
1.1 并发事务问题
- **脏读:**指一个事务读取了另一个事务未提交的数据。
- **幻读:**在同一个事务中,多次查询返回的结果集不同。
- **不可重复读:**在同一个事务中,多次读取同一条记录,结果可能不同。
- **可重复读:**在同一个事务中,多次读取同一条记录,结果是相同的。
2 事务实现原理
2.1 Redo Log
Redo Log也被称作重做⽇志,是InnoDB存储引擎特有的⽇志,用来保证事务的原⼦性和持久性。
Redo Log通常包含两部分:⼀部分是内存中的日志缓冲,称作Redo Log Buffer,这部分日志较容易丢失;另⼀分是存放在磁盘上的重做⽇志⽂件,称作Redo Log File,这部分⽇志是持久化到磁盘上的,不容易丢失。

订单数据会被优先写到Redo Log Buffer中,随后写入redo log文件中,当mysql发生故障重启时,会通过redo log文件中的数据对订单表中数据进行恢复。
2.1.1 Redo Log刷盘规则
Redo Log具有以下⼏种刷盘规则。
- 开启事务,发出提交事务指令后是否刷新⽇志由变量innodb_flush_log_at_trx_commit决定。