博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
InnoDB的MVCC如何解决幻读
阅读量:6938 次
发布时间:2019-06-27

本文共 580 字,大约阅读时间需要 1 分钟。

hot3.png

InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。

什么是幻读?

事务A读取了一个范围内的数据,此时事务B在该范围内插入了一条数据,并立马提交了事务,此时事务A再次读取这个范围的数据时,发现多了一条,就好像幻觉一样。

 

什么是MVCC?

多版本并发控制。InnoDB为每行记录添加了一个版本号(系统版本号),每当修改数据时,版本号加一。

在读取事务开始时,系统会给事务一个当前版本号,事务会读取版本号<=当前版本号的数据,这时就算另一个事务插入一个数据,并立马提交,新插入这条数据的版本号会比读取事务的版本号高,因此读取事务读的数据还是不会变。

例如:

此时books表中有5条数据,版本号为1

事务A,系统版本号2:select * from books;因为1<=2所以此时会读取5条数据。

事务B,系统版本号3:insert into books ...,插入一条数据,新插入的数据版本号为3,而其他的数据的版本号仍然是2,插入完成之后commit,事务结束。

事务A,系统版本号2:再次select * from books;只能读取<=2的数据,事务B新插入的那条数据版本号为3,因此读不出来,解决了幻读的问题。

转载于:https://my.oschina.net/chinaxy/blog/1827411

你可能感兴趣的文章
SQLite操作
查看>>
安装Gogs及简单配置(使用默认数据库)
查看>>
奔向新纪元,Vista安装经历
查看>>
Centos7无法使用ssh登陆及解决方案
查看>>
应用强制访问控制管理网络服务
查看>>
Exchange 2013多租户托管PART 2:Exchange基本配置
查看>>
Mellanox发布升级版RoCE软件 简化以太网RDMA部署
查看>>
《认知设计:提升学习体验的艺术》——学习者不希望觉得自己愚蠢
查看>>
大数据产业“跑”出“长春速度”
查看>>
YII2.0框架分页
查看>>
c#数据库编程
查看>>
我的友情链接
查看>>
MongoDB 更新文档
查看>>
javaweb Servlet开发
查看>>
websocket-bench压力测试
查看>>
http://91.213.30.151/
查看>>
Android ViewStub详解
查看>>
JavaScript中的prototype、__proto__和constructor
查看>>
mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
查看>>
java类初始化顺序-阿里笔试题
查看>>