不可重复读

在同一事务中,两次读取同一数据,得到内容不同,侧重点在于数据修改

幻读

同一事务中,用同样的操作读取两次,得到的记录数不相同,幻读的侧重点在于两次读取的纪录数量不一致

不可重复读和幻读在概念上有些交叉,对于不可重复读来说,在同一个事务中,如果读取到的记录数量发生变化,也可以看作是一种不可重复读,同样,对于幻读来说,同一个事务中的读取结果数量一致,但是内容发生了变化,也可以看成是一种不可重复读。

对于mysql,这里讨论一下read committed和repeatable read两个事务隔离级别的不可重复读和幻读:

read committed:

在read committed隔离级别下,存在不可重复读和幻读现象。

起两个事务1和2,1采用快照读读取数据,2修改其中一条满足1查询条件的数据并提交,这时1再快照读一次,就会发现2添加的记录,这就是不可重复读。但如果1采用当前读方式读取数据,由于读取数据的时候会给满足条件的数据加锁,因此,事务2无法修改数据内容,如果单纯从数据内容发生变化这个方面来考虑的话,是不会出现不可重复读的问题的。同时,如果考虑到记录数量增减,由于read committed隔离级别并没有gap锁,所以虽然不能修改采用当前读方式锁定的数据,但是可以在查询条件满足的范围内增加新的数据,这也可以看作是一种不可重复读,但显然这种情况划分到幻读更好。

repeatable read:

在repeatable read隔离级别下,mysql不仅解决了不可重复读,还通过gap锁的引入,解决了幻读的问题。

具体分析与上边类似,只是在repeatable隔离级别下,如果事务2对某些数据作了更新,事务1通过快照读已经不会读取到数据变化,所以repeatable read隔离级别解决了不可重复读的问题。同时由于引入了gap锁,事务2也无法在事务1采用当前读的前提下在事务1的查询条件满足范围内插入新的数据,所以记录数量不会发生变化,也就不存在幻读问题。

当隔离级别是可重复读,且禁用innodb_locks_unsafe_for_binlog的情况下,才可以利用gap锁避免幻读,gap锁是为了保证语句级别binlog的串行化。

总结:

如果仅仅考虑数据内容发生变化来衡量不可重复读,那么只有在read committed隔离级别的快照读中才会出现不可重复读,如果考虑数据数量变化,那么在read committed隔离级别的快照读和当前读中都存在不可重复读现象;

read committed隔离级别下,快照读和当前读都会产生幻读现象;

repeatable read隔离级别下,只有快照读会产生幻读现象,当前读已经通过gap锁的引入消除了幻读现象。

(何登成大神在博客中将幻读的定义限制在当前读的前提下,个人认为还是幻读和可重复读的具体定义不清晰)

幻读Java_关于幻读 - hellopretty - 博客园相关推荐

  1. 圈复杂度函数Java_圈复杂度 - byron_nj - 博客园

    Cyclomatic Complexity 1. 概念 a. 圈复杂度是一种衡量代码复杂程度的标准. b. 圈复杂度高的害处: 圈复杂度大说明代码的判断逻辑复杂,可能质量低: 需要的更多的测试用例,难 ...

  2. unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客

    unix c线程同步的三种方法:互斥量.读写锁以及条件变-xhb8413-ChinaUnix博客 unix c线程同步的三种方法:互斥量.读写锁以及条件变 2012-03-30 14:42:38 分类 ...

  3. logminer java_使用OracleLogminer同步Demo1Demo介绍-博客园.PDF

    使用OracleLogminer同步Demo1Demo介绍-博客园 使用Oracle Logminer 同步Demo 1 Demo 介绍 1.1 Demo 设想 前面介绍了Oracle LogMine ...

  4. 笔记:编程的一些建议 - 时间伙伴 - 博客园

    笔记:编程的一些建议 0.今天偶然和同学聊到Eric Steven Raymond的<大教堂与集市>,想起可能会有些同学没看过,给个链接吧.http://www.yeeyan.com/ar ...

  5. 聊聊在博客园写博客的这两年《Unity 3D脚本编程:使用C#语言开发跨平台游戏》正式出版...

    版本状态: 2016.9 第一次印刷 (2016.11 输出到台湾) 2017.1 第二次印刷 2017.5 第三次印刷 2017.5 电子书上线:Unity 3D脚本编程--使用C#语言开发跨平台游 ...

  6. 博客园的“随笔、文章、新闻、日记有啥区别”

    随笔:是一些比较杂乱的技术类东西且有待修改和讨论的文章,假如是原创则只是作者随时提笔写下的内容,而并没有经过太多的推敲,甚至措辞也没有得到很合理的运用. 文章:直接获得的有正规性质的文章,或当随笔中的 ...

  7. 博客园----你真的没有没落.感恩博客园。。。

    前言 拒绝谩骂!~~~~~~欢迎拍砖.!!!我不是博客园的托哦!~我只是一个普普通通的诶提(IT)人而已!~~好吧! 我打从心底的感恩博客园. 大家都知道,这些有一篇帖子引起了大家的关注<即将没 ...

  8. 限制会话id服务端不共享_会话控制 - able-woman - 博客园

    会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段.而会话,就是用户通过浏览器和服务器的一次通话. 为什么要有会话控制? 因为HTTP协议是无状态的,服务器不知道用户上一次做 ...

  9. 一套简约漂亮的响应式博客园主题皮肤分享给你们(一)

    转载:https://www.cnblogs.com/hafiz/p/7573464.html 一.背景 最近在自己博客园逛的时候,总会有一个感觉,真是太丑了,然而又觉得自己暂时抽不出太多的时间来搭建 ...

  10. 2007年度最具投资价值100强网站揭晓——博客园榜上有名

    经过400多专家和数百万名网友们3个多月的共同推荐和评价,万众瞩目的"2007年度中国最具投资价值100网站"在北京揭晓,大会挖掘出锐意创新.最具投资价值的网站,这些网站在技术.模 ...

最新文章

  1. Java的系统Property
  2. 「SDOI2014」数数 解题报告
  3. LeetCode 875. 爱吃香蕉的珂珂(二分查找)
  4. greenplum 替代mysql_转:MySQL到Greenplum迁移分析
  5. GBDT、随机森林、xgboost算法原理解析视频公开
  6. 快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
  7. QCC3007--打印库文件 log
  8. Mathpix Snip他们都说好用!我也试一试尝试下载-安装-使用
  9. python安装jupter在线ide
  10. 蜂鸣器播放天空之城详细解析
  11. 为程序员准备的英语学习资料
  12. 计算机组成原理--填空,简答,判断,计算大题
  13. STM32基础12--数模转换(DAC)
  14. mysql数据库安装错误报错Falled不成功,感叹号
  15. 由save is not vaild without active transcation引发的问题
  16. 一个摆烂年轻人对手机的需求
  17. 君正 Halley6 开发板调试SPI LCD
  18. StarUML3.0.1的破解方法
  19. html给下拉菜单设置背景色,如何更改下拉菜单活动背景的颜色(即。tk.列表框)在一个ttk.组合框...
  20. 电脑用摄像头 质量不错的几个型号 旧手机接电脑当摄像头 iriun webcam

热门文章

  1. Centos7 无线网络设置
  2. win10外接显示器后无声音 解决方案
  3. uni-app 小程序dom转img 生成海报插件Painter;解决引入网络图片真机显示空白问题;解决生成的图片模糊问题
  4. 大江大河未来10年:中国人改变命运的的七次机遇
  5. mysql备份和优化_MySQL优化|数据库的备份和恢复|MySQL高级
  6. 七年切图仔如何面试大厂web前端?(沟通软技能总结) | 掘金技术征文
  7. 5G无线关键技术 — 新型传输波形技术和先进编码与调制技术
  8. MSP430F149的看门狗定时器
  9. 标准误 Standard error 简单解释
  10. PHP命名空间 namespace 及 use 的用法