目录

并发读取数据出现的问题

脏读:一个事务读取另一个事务未提交的数据

幻读:一个事务内进行了多次读取,数据总量不一致

不可重复读:一个事务对同一数据进行读取,前后数据内容不一致

区别:

隔离级别

读未提交:所有读问题都有可能发生,一般不会采取这种隔离级别

读已提交:只能避免脏读发生,Oracle默认的隔离级别

可重复读:能够避免脏读、不可重复读,MySQL中Innodb引擎默认的隔离级别

可串行化:可以解决所有读问题,但是由于是串行执行,效能效率比较低

并发事务下发生的问题与解决方式


并发读取数据出现的问题

脏读:一个事务读取另一个事务未提交的数据

A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏数据,但事务B良心发现,又用回滚把数据恢复成原来干净、纯粹的样子,而事务A却什么都不知道,最终结果就是事务A读取了此次的脏数据,称为脏读。

幻读:一个事务内进行了多次读取,数据总量不一致

事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。

不可重复读:一个事务对同一数据进行读取,前后数据内容不一致

事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,也就是数据不重复了,系统不可以读取到重复的数据,成为不可重复读。
可以理解为根据同一个Id查询,前后结果不一致

区别:

1.脏读指的是一个事务读到了其他事务未提交的数据。

2.不可重复读指的是一个事务中多次读到同一条数据发生了变化,重点在于表中已经存在的数据被其他事务修改了。

3.幻读指的是一个事务被其他事务插入或者删除的数据有影响,重点在于事务开始后,其他事务插入或删除了数据。


脏读、幻读、不可重复读是在并发事务的情况下才发生的,为了解决这些问题,数据库引入了隔离级别,并且不同的隔离级别可以解决不同的问题。

隔离级别

读未提交:所有读问题都有可能发生,一般不会采取这种隔离级别

在这种隔离级别下,所有事务能够读取其他事务未提交的数据。读取其他事务未提交的数据,会造成脏读。因此在该种隔离级别下,不能解决脏读、不可重复读和幻读。

读已提交:只能避免脏读发生,Oracle默认的隔离级别

在这种隔离级别下,所有事务只能读取其他事务已经提交的内容。能够彻底解决脏读的现象。但在这种隔离级别下,会出现一个事务的前后多次的查询中却返回了不同内容的数据的现象,也就是出现了不可重复读。

可重复读:能够避免脏读、不可重复读,MySQL中Innodb引擎默认的隔离级别

在这种隔离级别下,所有事务前后多次的读取到的数据内容是不变的。也就是某个事务在执行的过程中,不允许其他事务进行update操作,但允许其他事务进行add操作,造成某个事务前后多次读取到的数据总量不一致的现象,从而产生幻读。

可串行化:可以解决所有读问题,但是由于是串行执行,效能效率比较低

在这种隔离级别下,所有的事务顺序执行,所以他们之间不存在冲突,从而能有效地解决脏读、不可重复读和幻读的现象。但是安全和效率不能兼得,这样事务隔离级别,会导致大量的操作超时和锁竞争,从而大大降低数据库的性能,一般不使用这样事务隔离级别。

并发事务下发生的问题与解决方式

隔离级别 脏读     不可重复读 幻读
读未提交 可能(出现) 可能 可能
度已提交 不可能(出现) 可能 可能
可重复读 不可能 不可能 可能
可串行化 不可能 不可能 不可能

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦

数据库脏读、不可重复读、幻读以及对应的隔离级别相关推荐

  1. 脏读,不可重复读,幻读区别

    脏读 脏读又称无效数据读出.一个事务读取另外一个事务还没有提交的数据叫脏读. 例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Roll ...

  2. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  3. oracle 脏读,脏读 不可重复读 幻读

    序言 脏读.不可重复读.幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来 ...

  4. mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

    MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...

  5. 脏读,不可重复读,幻读区别和避免

    在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题. 名词解析和解决方案 脏读 脏读又称无效数据读出(读出了脏 ...

  6. MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...

  7. 数据库的脏读、不可重复读、幻读以及四种隔离级别

    一.数据库的脏读.不可重复读和幻读 1.脏读: (读取了未提交的新事物,然后被回滚了) 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 比如我给你转了100万,但是我还 ...

  8. mysql rr解决幻读吗_mysql rr隔离级别解决幻读了吗

    以下内容全部基于innodb. 虽然下面有很多概念很浅显,但还是要解释一下 什么是幻读? 当一个事务在多次查询中,发现了一行不是在当前事务中添加的数据.出现这种问题就叫做幻读. 关于四种隔离级别 未提 ...

  9. MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)

    目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...

  10. mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

    首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...

最新文章

  1. CCS V5 创建工程和配置软件仿真
  2. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统
  3. opensuse 12.1 启动脚本
  4. springboot+security整合(1)
  5. Java,JavaFX的流畅设计风格进度栏
  6. UI组件-UITabbarController
  7. php秒数怎么转换为时间格式,php将秒数转换为时间(年、月、日、小时…)
  8. MATLAB离散傅里叶变换实验结果分析,Matlab离散傅里叶变换实验报告
  9. 一步一步学Entity Framework 4(2)
  10. mybatis原始mapper开发未集成springMVC
  11. 学以致用六---Centos7.2+python3.6.2+django2.1.1 --搭建一个网站
  12. 高清成主流 十大最受用户关注摄像头
  13. mysql如何导出数据脚本_MySQL 导出数据
  14. kaggle 电商数据分析
  15. 2022-2027年中国文化传媒行业市场调研及未来发展趋势预测报告
  16. Typecho handsome主题一言接口修改
  17. QT QChartView显示坐标值
  18. CSS中如何设置父元素透明度不影响子元素透明度
  19. 调用第三方api在线生成二维码
  20. 使用Selenium IDE进行自动化测试

热门文章

  1. make~warning: Clock skew detected. Your build may be incomplete.
  2. 【二】情感对话 Control Globally,Understand Locally: A Global-to-Local Hierarchical Graph Network for ESConv
  3. css动画怎么暂停,纯CSS代码实现动画的暂停与播放
  4. Java实现从第三方系统单点登录到致远OA
  5. 现代计算机存储数据的基本单位是,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
  6. 2018年全球十大突破性技术
  7. 朋友圈微信投票很麻烦?python开发个自动化刷票脚本,再也不用头痛了!
  8. 读《大秦帝国》第三部
  9. 【渝粤题库】陕西师范大学201931 唐诗研究 作业
  10. 基于OXC的光电联动全光网组网方案研究与实践