InnoDB的MVCC如何解决幻读
来源:互联网 发布:淘宝上的油画都是喷绘 编辑:程序博客网 时间:2024/06/05 22:02
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,因此读不出来,解决了幻读的问题。
阅读全文
1 0
- InnoDB的MVCC如何解决幻读
- MVCC如何实现InnoDB的高并发
- innodb的MVCC功能
- InnoDB的MVCC
- InnoDB中MVCC的实现
- 深入InnoDB的MVCC机制
- Innodb MVCC的实现分析
- innoDB的MVCC实现方式
- 浅谈InnoDB的MVCC策略
- InnoDB MVCC
- mvcc innodb
- 对innodb MVCC实现的一点点思考
- 辛星浅析InnoDB的MVCC实现
- InnoDB存储引擎MVCC的工作原理
- 关于innodb中MVCC的一些理解
- Mysql Innodb中undo-log和MVCC多版本一致性读的实现(源码分析)
- Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
- Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
- Data Binding 学习
- ABAP 中的搜索帮助
- Multi-Thread problem
- 用top,ps,jstack找到java线程异常代码
- Django05-表单
- InnoDB的MVCC如何解决幻读
- 变相解决 UnicodeDecodeError: 'utf8' codec can't decode byte0xc8 in position 9: invalid continuation byt
- 【安全牛学习笔记】 安装Java、安装显卡驱动、安装网卡补丁、并发线程限制、电源优化.txt
- .net core 下载并保存文件
- LintCode 通配符匹配
- Hive2.1.1 + mariadb-10.1.14-linux-x86_64 安装
- java面试题:spring中的BeanFactory与ApplicationContext的作用和区别?
- Xcode 如何快速输入自定义代码
- AWK 简明教程