
Mysql的MVCC机制是什么到底怎么理解?1. 多版本的并发控制机制 每行数据记录 修改历史mysql的MVCC(多版本的并发控制机制)MVCCMulti-Version Concurrency Control多版本并发控制本质上是一种数据库的版本 并发控制机制通过维护数据的多个版本来进行实现高效读写操作他的核心原理为每行数据记录 修改历史通过两个隐藏的字段(DB_TRX_IDDB_ROLL_PTR)标识数据版本以及回滚日志MVCC通过读视图为事务提供了快照机制实现非阻塞和一致性的视图也叫做一致性非锁定读取避免读写冲突显著提高了高并发场景下的性能以及事务.2. TRX 事务ID ROLL_PTR 回滚日志旧版本DB_TRX_ID:记录我们最后一次修改事务ID。DB_ROLL_PTR:指向了回滚日志(Undo Log)存储的是旧版本的数据。pointer 指针下面图的创建版本删除版本只是为了 大家好理解3. 只查创建时间小于等于当前事务id的数据可重复查查询途中 其他事务进行了插入3.1 事务1第一次插入2条数据创建版本都是1删除版本未定义3.2 事务32在查询 事务3插入了新数据 创建版本为3只能查找创建时间小于等于当前事务ID的数据和删除版本大于当前事务ID的行(或未删除)也就是不能查到在我的事务开始之后插入的数据老杨的创建ID大于2所以还是只能查到两条数据4. 和 删除版本大于当前事务ID的行(或未删除)如下面的例子创建版本3被占用了删除版本 递增 为44.1 事务4删除 id 2 的 删除版本 就是4 会被查出来如下图事务4 删除了 id 2此时事务2再次查询还是 那两条数据id 2 的 删除版本 就是4。注意和删除版本大于当前事务ID的行。也就是在我事务开始之后删除的数据所以老刘依然可以查出来。所以还是这两条数据。4.2 事务5id为1的更新 删除版本标志变成了 5会插入事务5的数据如下图事务5id为1的进行了更新MVCC是进行了 插入了一条数据。 此时事务2再次查询还是那两条数据。注意此时 最原始 id为1的 删除版本 变成了 5指向 下面的创建的版本根据规则事务2扫描 删除版本 52老严还是会查出来注意此时 MVCC是进行了 插入了一条数据此数据的创建版本为54.3 事务2 会查出删除版本为 5 和 4 的数据