美文网首页一些收藏
说说什么是幻读,什么是MVCC?

说说什么是幻读,什么是MVCC?

作者: 嘘寒问暖 | 来源:发表于2022-06-12 22:05 被阅读0次

要说幻读,⾸先要了解MVCC,MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。

我们每⾏数实际上隐藏了两列,创建时间版本号,过期(删除)时间版本号,每开始⼀个新的事务,版本号都会⾃动递增。

还是拿user表举例⼦,假设我们插⼊两条数据,它们实际上应该⻓这样

这时候假设⼩明去执⾏查询,此时current_version=3

select * from user where id<=3;

同时,⼩红在这时候开启事务去修改id=1的记录,current_version=4

update user set name='张三三' where id=1;

执⾏成功后的结果是这样的

如果这时候还有⼩⿊在删除id=2的数据,current_version=5,执⾏后结果是这样的。

由于MVCC的原理是查找创建版本⼩于或等于当前事务版本,删除版本为空或者⼤于当前事务版本,⼩明的真实的查询应该是这样

select * from user where id<=3 and create_version<=3 and (delete_version>3 or delete_version is null);

所以⼩明最后查询到的id=1的名字还是'张三',并且id=2的记录也能查询到。这样做是为了保证事务读取的数据是在事务开始前就已经存在的,要么是事务⾃⼰插⼊或者修改的。

明⽩MVCC原理,我们来说什么是幻读就简单多了。举⼀个常⻅的场景,⽤户注册时,我们先查询⽤户名是否存在,不存在就插⼊,假定⽤户名是唯⼀索引。

1. ⼩明开启事务current_version=6查询名字为'王五'的记录,发现不存在。

2. ⼩红开启事务current_version=7插⼊⼀条数据,结果是这样:

3. ⼩明执⾏插⼊名字'王五'的记录,发现唯⼀索引冲突,⽆法插⼊,这就是幻读。

相关文章

  • 说说什么是幻读,什么是MVCC?

    要说幻读,⾸先要了解MVCC,MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。 我们每⾏数实...

  • 22、说说什么是 MVCC?

    说说什么是 MVCC? 多版本并发控制(MVCC=Multi-Version Concurrency Contro...

  • MVCC原理机制

    目录 背景 前提回顾什么是MVCC什么是当前读和快照读当前读,快照读和MVCC关系MVCC,乐观锁,悲观锁关系 M...

  • MVCC多版本并发控制

    前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系 MVCC实现原理隐式字段undo日志R...

  • MVCC多版本并发控制

    前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系 MVCC实现原理隐式字段undo日志R...

  • 什么是MVCC

    多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁和写锁就不冲突了,不同的事务session...

  • MVCC 能解决幻读吗?

    昨天面试当中一个小伙认为MVCC可以解决RR中的幻读问题, 先说结论, MVCC不能解决幻读, 但是如果本事务当中...

  • 2021-04-02 Next-Key Lock 解决幻读

    上文中已经总结了Mysql是如何利用MVCC实现四个隔离级别的,但是对于幻读问题,MVCC是无能为力的。在RR隔离...

  • 数据库-MVCC

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题...

  • MySQL系列(五)----MySQL MVCC实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题...

网友评论

    本文标题:说说什么是幻读,什么是MVCC?

    本文链接:https://www.haomeiwen.com/subject/fadnmrtx.html