MySQL并发问题区别-MVCC如何解决的

脏读

事务a,事务b,b读到了a刚修改未提交的数据

不可重复读

针对同一行记录,两次读到的结果不一致

(范围是一行)

幻读

范围比不可重复读大很多,是表的范围,事务a第一次查的时候不存在,后面事务b插入提交,事务a第二次查的时候又发现多了数据,仿佛存在幻影

脏读是什么措施都没有,MVCC解决的主要是RC和RR

RC是读已提交,每次查询新建一个ReadView,通过MVCC规则确定访问数据的历史版本

RR是可重复读,只有事务第一次Select才会新建ReadView,后续查询除非是本事务修改或者显式当前读(Select * From 。。for Update/delete/insert),否则查询结果直接复用前面的ReadView,直接返回旧的读取结果。

MVCC本质上是无锁实现,乐观锁思想,提高了并发能力,比锁的效率要高很多

相关推荐
程序员曼布2 小时前
主从架构:技术原理与实现
redis·mysql·架构
惊起白鸽4506 小时前
MySQL全量,增量备份与恢复
数据库·mysql
暮雨疏桐7 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
Tangcan-7 小时前
【MySQL】数据库基础
数据库·mysql
蔡蓝8 小时前
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
数据库·mysql
钢铁男儿9 小时前
C# 方法(可选参数)
数据库·mysql·c#
陆少枫9 小时前
MySQL基础关键_013_常用 DBA 命令
数据库·mysql
Johny_Zhao10 小时前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
阿乾之铭10 小时前
Spring Boot 参数验证
java·数据库·mysql
唐人街都是苦瓜脸11 小时前
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
数据库·mysql