目录
MySQL 事务实现原理
1. 事务的基本概念
2. 实现原理
日志系统
锁机制
MySQL 隔离级别
1. 隔离级别概述
2. 各隔离级别详解
读未提交(Read Uncommitted)
读已提交(Read Committed)
可重复读(Repeatable Read)
串行化(Serializable)
3. 设置隔离级别
MySQL 事务实现原理
1. 事务的基本概念
事务是一组不可分割的 SQL 操作序列,这些操作要么全部成功执行,要么全部失败回滚。事务具有四个特性,即 ACID 特性:
- 原子性(Atomicity):事务中的操作要么全部完成,要么全部不完成,不会出现部分完成的情况。
- 一致性(Consistency):事务执行前后,数据库的状态保持一致,即数据的完整性约束不会被破坏。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不会被其他事务干扰,各个事务之间相互隔离。
- 持久性(Durability):事务一旦提交,其对数据库的修改将永久保存,即使数据库发生故障也不会丢失。
2. 实现原理
日志系统
- redo log(重做日志)
- 作用:保证事务的持久性。当事务提交时,MySQL 会先将事务的修改操作记录到 redo log 中,然后再将数据页刷新到磁盘。即使在事务提交后,数据库发生崩溃,在重启时可以通过 redo log 恢复未写入磁盘的数据页,保证数据的持久性。
- 工作流程:事务执行过程中,对数据的修改会先记录到内存中的 redo log buffer 中,当事务提交时,将 redo log buffer 中的内容刷新到磁盘上的 redo log 文件中。
- undo log(回滚日志)
- 作用:保证事务的原子性和实现多版本并发控制(MVCC)。当事务需要回滚时,可以通过 undo log 中的信息将数据恢复到事务开始之前的状态。同时,undo log 还用于实现 MVCC,为并发事务提供不同版本的数据。
- 工作流程:事务执行过程