MySQl

MySql默认的隔离级别为Repeatable Read,因此只会出现幻读的情况。

幻读

事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般。

例子:

在事务1中,查询User表id为1的是用户否存在,如果不存在则插入一条id为1的数据。

select * from User where id = 1;

在事务1查询结束后,事务2往User表中插入了一条id为1的数据。

insert into `User`(`id`, `name`) values (1, 'Joonwhee');

此时,由于事务1查询到id为1的用户不存在,因此插入1条id为1的数据。

insert into ` User`(`id`, `name`) values (1, 'Chillax');

但是由于事务2已经插入了1条id为1的数据,因此此时会报主键冲突,对于事务1 的业务来说是执行失败的,这里事务1 就是发生了幻读,因为事务1读取的数据状态并不能支持他的下一步的业务,见鬼了一样。这里要灵活的理解读取的意思,第一次select是读取,第二次的insert其实也属于隐式的读取,只不过是在mysql的机制中读取的,插入数据也是要先读取一下有没有主键冲突才能决定是否执行插入。

Oracle

Oracle默认的隔离级别为Read Committed,因此可能出现不可重复度和幻读。

不可重复读

同样的条件,你读取过的数据,再次读取出来发现值不一样了。

例子:

在事务1中,JoonWhee读取了自己的工资为1000,但是此时事务1的操作还并没有完成 ,后面还有1次相同的读取操作。

con1 = getConnection();

select salary from employee where employeeName ="JoonWhee";

在事务2中,这时财务人员修改了JoonWhee的工资为2000,并提交了事务。

con2 = getConnection();

update employee set salary = 2000 where employeeName = "JoonWhee";

con2.commit();

在事务1中,JoonWhee再次读取自己的工资时,工资变为了2000 。

//con1

select salary from employee where employeeName ="JoonWhee";

在一个事务中前后两次读取的结果并不致,导致了不可重复读。

幻读

同样的条件,第1次和第2次读出来的记录数不一样。

例子:

目前工资为1000的员工有10人。

事务1,读取所有工资为1000的员工,共读取10条记录 。

con1 = getConnection();

Select * from employee where salary =1000;

这时另一个事务向employee表插入了一条员工记录,工资也为1000

con2 = getConnection();

Insert into employee(employeeName,salary) values("Lili",1000);

con2.commit();

事务1再次读取所有工资为1000的员工,共读取到了11条记录,这就产生了幻读。

//con1

select * from employee where salary =1000;

mysql 幻读和不可重复读_幻读和不可重复读的区别相关推荐

  1. 学术会议论文查重吗_国际会议论文会查重吗?

    国际会议论文会查重吗?论文查重是论文公开发表的基础,只要文章要公开发表就必须要通过查重检测,会议论文也不例外,大家所熟知的EI论文.IEEE论文都是需要进行查重检测的,很多作者看到查重二字就感到压力倍 ...

  2. 爱读掌阅java版_爱读掌阅app官方下载-爱读掌阅旧版本 - 超好玩

    爱读掌阅app是一款非常好用的阅读小说平台,和用户一起走过了非常多的岁月,爱读掌阅和旧版本比起来有很大的差别,可以感受发哦非常大的改变,拥有十分强大的小说资源库,让你能够体会到丰富的小说阅读自由.感兴 ...

  3. vba工作表重命名_如何在Excel中重命名工作表选项卡

    vba工作表重命名 By default, worksheet tabs in Excel are given generic names, such as Sheet1, Sheet2, and s ...

  4. linux中文件重命名_如何在Linux中重命名文件?

    linux中文件重命名 This tutorial will walk you through the simple steps to rename a file in Linux. 本教程将引导您完 ...

  5. 不可重复读和幻读的区别_面试官:MySQL的可重复读级别能解决幻读吗

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...

  6. mysql可重复读_到底什么是mysql的幻读和不可重复读

    幻读和不可重复读的定义 事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据称为幻读. 如果事务A 按一定条件搜索, ...

  7. mysql串行化防幻读原理_透彻解读mysql的可重复读、幻读及实现原理

    目录 一.事务的隔离级别 二.mysql怎么实现的可重复读 举例说明MVCC的实现 MVCC逻辑流程-插入 MVCC逻辑流程-删除 MVCC逻辑流程-修改 MVCC逻辑流程-查询 三.幻读 快照读和当 ...

  8. mysql不可重复读和重复读_脏读、幻读、不可重复读的区别是什么

    脏读.幻读.不可重复读的区别:1.脏读就是指当一个事务正在访问数据,并且对数据进行了修改:2.不可重复读是指在一个事务内,多次读同一数据:3.幻读是指当事务不是独立执行时发生的一种现象. [相关学习推 ...

  9. mysql 快照读 幻读,InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读...

    InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,只解决了快照读情况下的幻读问题,当前读情况下解决幻读问题得靠next-key锁. mysql如何实现避免幻读: 在快照读读情况下 ...

最新文章

  1. Netflix 官方技术博客:个性化分发与推荐,走在前列的 Netflix 是怎么做的?
  2. linux编译树莓派内核,编译树莓派 4B Linux 5.9 内核
  3. 如何将参数传递给批处理文件?
  4. 七夕保命攻略,各位兄弟请收好!
  5. P3 Simulink仿真-《Matlab/Simulink与控制系统仿真》程序指令总结
  6. 聊聊我对开发项目选技术的看法
  7. 首次使用eclipes运行项目报错“Java.lang.ClassNotFoundException”
  8. restful风格_什么是RESTful风格的API设计?
  9. 深入了解absolute
  10. 信息安全-移动应用安全需求分析与安全保护工程
  11. 计算机无法添加本地策略组,解决win10找不到本地组策略和本地用户的方法
  12. [转]河北省生源地信用助学贷款管理系统学生使用手册
  13. 你值得拥有!-阿里P8架构师荣耀典藏:Java多线程与Socket实战微服务框架笔记
  14. usb设备驱动之uvc设备
  15. 2018年度10大新兴技术:人工智能、量子计算、增强现实等
  16. Mac的最新版本JDK下载失败的解决方法
  17. 【电磁】基于Matlab模拟电偶极子电磁场附GUI界面
  18. 古巴比伦理财五大金科定律
  19. 如何统计网站的在线人数呢?
  20. Tekton task入门上

热门文章

  1. 快手技术嘉年华喊你来参加啦!
  2. Python入门你要懂哪些?这篇文章总算讲清楚了
  3. 属于 Hadoop 的大数据时代已结束
  4. 我去头条面试,面试官问我如何设计好API,看看我是如何吊打面试官的!
  5. 在 IIS 中部署 SPA 应用,多么痛的领悟!
  6. 72000 Star 下载工具被 GitHub 下架,背后的数字千年版权法案是什么?
  7. 专访华为杨海松:立足合作伙伴价值,构建健康HarmonyOS生态
  8. “鲲鹏新时代、中原更出彩” 2020数字经济峰会暨黄河鲲鹏生态发展大会召开
  9. 大学生程序员被勒索比特币后,绝地反击! | 原力计划
  10. Go 语言之 defer 的前世今生