事务4个隔离界别

Read Uncommitted, Read commited, Repeatable read, Serializable
Read Uncommitted.  最低的隔离级别,Read Uncommitted最直接的效果就是一个事务可以读取另一个事务并未提交的更新结果。
Read Committed.  Read Committed通常是大部分数据库采用的默认隔离级别,它在Read Uncommitted隔离级别基础上所做的限定更进一步, 在该隔离级别下,一个事务的更新操作结果只有在该事务提交之后,另一个事务才可能读取到同一笔数据更新后的结果。 所以,Read Committed可以避免Read Uncommitted隔离级别下存在的脏读问题, 但,无法避免不可重复读取和幻读的问题。

Repeatable Read.  Repeatable Read隔离级别可以保证在整个事务的过程中对同一笔数据的读取结果是相同的,不管其他事务是否同时在对同一笔数据进行更新,也不管其他事务对同一笔数据的更新提交与否。 Repeatable Read隔离级别避免了脏读和不可重复读取的问题,但无法避免幻读。(mysql默认隔离级别


Serializable.  最为严格的隔离级别,所有的事务操作都必须依次顺序执行,可以避免其他隔离级别遇到的所有问题,是最为安全的隔离级别, 但同时也是性能最差的隔离级别,因为所有的事务在该隔离级别下都需要依次顺序执行,所以,并发度下降,吞吐量上不去,性能自然就下来了。 因为该隔离级别极大的影响系统性能,所以,很少场景会使用它。通常情况下,我们会使用其他隔离级别加上相应的并发锁的机制来控制对数据的访问,这样既保证了系统性能不会损失太大,也能够一定程度上保证数据的一致性。

并发问题

脏读

 (针对未提交数据)如果一个事务中对数据进行了更新,但事务还没有提交,另一个事务可以“看到”该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所“看到”的数据就是一笔脏数据。

不可重复读

(针对其他提交前后,读取数据本身的对比)不可重复读取是指同一个事务在整个事务过程中对同一笔数据进行读取,每次读取结果都不同。如果事务1在事务2的更新操作之前读取一次数据,在事务2的更新操作之后再读取同一笔数据一次,两次结果是不同的,所以,Read Uncommitted也无法避免不可重复读取的问题。

幻读

(针对其他提交前后,读取数据条数的对比) 幻读是指同样一笔查询在整个事务过程中多次执行后,查询所得的结果集是不一样的。幻读针对的是多笔记录。在Read Uncommitted隔离级别下, 不管事务2的插入操作是否提交,事务1在插入操作之前和之后执行相同的查询,取得的结果集是不同的,所以,Read Uncommitted同样无法避免幻读的问题。

不可重复读和幻读区别

对于不可重复读和幻读,可以借用下面的例子理解:

不可重复读

不可重复读的重点是修改:

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

例子:

在事务1中,Mary 读取了自己的工资为1000,操作并没有完成

Java代码  
  1. con1 = getConnection();
  2. select salary from employee empId ="Mary";

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

Java代码  
  1. con2 = getConnection();
  2. update employee set salary = 2000;
  3. con2.commit();

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

Java代码  
  1. //con1
  2. select salary from employee empId ="Mary";

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

幻读

幻读的重点在于新增或者删除 (数据条数变化)

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

例子:

目前工资为1000的员工有10人。 
事务1,读取所有工资为1000的员工。

Java代码  
  1. con1 = getConnection();
  2. Select * from employee where salary =1000;

共读取10条记录

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

Java代码  
  1. con2 = getConnection();
  2. Insert into employee(empId,salary) values("Lili",1000);
  3. con2.commit();

事务1再次读取所有工资为1000的员工

Java代码  
  1. //con1
  2. select * from employee where salary =1000;

共读取到了11条记录,这就像产生了幻读。

对于脏读,不可重复读,幻读的一点理解,看懂红字很关键相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 用sql演示脏读,不可重复读,幻读,不怕你看不懂

    介绍 要聊事务,不可避免的要提到数据库事务的四大特性 原子性(Atomic) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 今天只聊隔离性,其他的比较 ...

  7. Mysql如何实现隔离级别 - 可重复读和读提交 源码分析

    Abstract 本文会(1) 演示Mysql的两种隔离级别.  (2) 跟着mysql的源代码来看看它是怎么实现这两种隔离级别的. Mysql的隔离级别 当有多个事务并发执行时, 我们需要考虑他们之 ...

  8. MySQL可重复读和读已提交实现原理,深入理解MVCC。

    1.隔离级别 MySQL中隔离级别分为4种,提未交读.读已提交.可重复读.串行化.同时MySQL默认隔离级别为可重复读. 图片 查看MySQL隔离级别 SELECT @@tx_isolation 设置 ...

  9. 三分钟了解MVCC(InnoDB如何实现可重复读和读已提交)

    快照读和当前读 快照读 快照读是指读取数据时不是读取最新版本的数据,而是基于历史版本读取的一个快照信息(mysql读取undo log历史版本) , 快照读可以使普通的SELECT 读取数据时不用对表 ...

最新文章

  1. javascript网页精华代码集
  2. 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?...
  3. 记录 grafana登录 从 go 迁移到 php
  4. Java基础提升篇:理解String 及 String.intern() 在实际中的应用
  5. 一步步学习SPD2010--第七章节--使用BCS业务连接服务
  6. Python统计分析--- 5.统计法与随机梯度下降(SGD)
  7. WPF MVVM实例三
  8. 从没想过会有一个这样的机会|大疆招聘
  9. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?
  10. 安装GD 完美解决make error
  11. 网络中的那些事儿(五)之校园网规划综述
  12. LeetCode 59. Spiral Matrix II
  13. 【Oracle经典】132个oracle热门精品资料——下载目录
  14. 嵌入式工具——smartmontools
  15. Ubuntu下如何截屏
  16. 我是怎样开发一个开源系统的安全模块?
  17. 7层计算机网络体系结构,【计算机网络7层体系结构】
  18. linux终端中文方块,Linux终端界面显示中文乱码或方块
  19. python安卓吾爱_【原创源码】 【无需第三方库】【支持签到 】 Python 吾爱挂机 无提示版...
  20. 解决Ubuntu屏幕分辨率不正常问题

热门文章

  1. ext4、ntfs、xfs、btrfs、zfs、f2fs和reiserFS文件系统性能对比
  2. python基于轻量级CNN模型开发构建手写藏文数字识别系统
  3. JNDI-Injection-Exploit
  4. Camera Tuning职业介绍
  5. 语言模型(三)—— 循环神经网络语言模型(RNNLM)与语言模型评价指标
  6. 安卓 电子围栏_基于Android平台的电子围栏设计与实现
  7. python unicode-escape
  8. 基于QT+Mysql实现的疫情下低风险旅行模拟系统
  9. 岳麓书院门票价格拟下调20% 官方称降价不降质
  10. MVVM处理TreeView的SelectedItem的绑定的两种方式