简介

Multi-Version Concurrency Control版本并发控制,MVCC 是一种并发控制方法,一般在数据库管理系统中,实现数据库并发访问;在编程语言实现事务内存
*往期知识不做重点
事务具有4个特征,分别是原子性、一致性隔离性和持久性
数据库事务隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。

引入

例题:在隔离级别为不可重复读、可重复读分别输出什么
在这里插入图片描述
1、RR级别:张三 张小三
2、RC级别:张三 张三

RR->RC Innodb做的事情

MySQL底层用链的方式存着版本
在这里插入图片描述

两个重要名词

快照读:select * from xxx ,普通的sql语句
当前读:select * form xxx for update; delete ; insert into ; update

快照读下使用MVCC——解决不可重复读

undo log 版本链 + Read View 可见性规则
RR 隔离级别实现原理,就是 MVCC 多版本并发控制,而 MVCC 是通过 ReadView+
Undo Log 实现的,Undo Log 保存了历史快照,Read View 可见性规则帮助判断
版本数据是否可见。
Undo Log 版本链长这样
在这里插入图片描述
不可重复读就是最上面图中,两次事务D的select语句,每次获取新的readView
可重复读就是最上面图,两次事务D的select语句,取相同的readView

当前读下使用间隙锁(或nextkeylock)——解决幻读问题

针对索引区间查询或者修改,Mysql自动索引间隙加锁,来解决幻读问题
1、执行语句
SELECT * FROM user WHERE id > 3 AND id<7 FOR UPDATE;
2、假设B+ Tree 的索引结构这个结构中有四个索引元素分别是:1、3、7、10
加了间隙锁后(3,7),insert into xxx values (5,name)这个时候就无法插入了,要等上面的事务提交以后方能插入
3、当区间变为where id>3,那升级nextkeylock,索引区间为(-∞,1],(1,3],(3,7],(7,10],(10,+∞]
所以用到了(3,7],(7,10],(10,+∞]

原文地址:https://blog.csdn.net/weixin_43914278/article/details/134733562

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29542.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注