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本质上是无锁实现,乐观锁思想,提高了并发能力,比锁的效率要高很多

相关推荐
流星白龙39 分钟前
【MySQL高阶】13.其他存储引擎
android·数据库·mysql
Lyyaoo.1 小时前
【MySQL】SQL优化
android·sql·mysql
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第89题】【Mysql篇】第19题:Hash 索引和 B+ 树索引的区别?它们在使用方面的区别?
java·数据库·mysql·面试·哈希算法
元宝骑士1 小时前
MySQL 实战:跨表排序 + 指定类型置顶四种写法
后端·mysql
流星白龙1 小时前
【MySQL高阶】11.InnoDB存储引擎
数据库·mysql
梓䈑2 小时前
【MySQL】库的操作(数据库的创建、查看、修改 和 备份)
数据库·mysql
流星白龙3 小时前
【MySQL高阶】14.MySQL存储结构
android·数据库·mysql
流星白龙3 小时前
【MySQL高阶】15.MySQL存储结构,页结构
android·mysql·adb
流星白龙3 小时前
【MySQL高阶】17.InnoDB 内存结构
数据库·mysql·adb
Lyyaoo.3 小时前
【MySQL】索引
数据库·mysql