本文详解 repeatable read 可重复读 隔离级别产生的影响(幻读)

-- SERIALIZABLE serializable 序列化 ;一个个事务排成序列的形式。事务一个挨一个执行,等待前一个事务执行完,后面的事务才可以顺序执行

-- REPEATEABLE READ repeatable read 可重复读;安全上不如serializable,但是性能上比serializable强很多,但会造成幻读。隔离级别:导致幻读,同时开启两个事务,事务A和事务B,当事务A修改了数据,并且提交了,事务B此时查看不到事务A已经提交了的数据,这样保持事务B先后两次查询结果的一致性,当事务B执行update操作的时候,是可以更改事务A提交了的update,insert数据,执行过update操作之后再次select发现数据前后查询不一致!(幻读)

-- READ COMMITED read committed 提交的可读;(oracle默认)

-- READ UNCOMMITED read uncommitted 未提交的可读;(mysql 默认)别的事务可以查看的到使用 当前事务还没提交的 数据;会 脏读,幻读,不可重复读。

-- 幻读:一个事务的查询中查询两次数据,数据不一致!同时开启事务A,事务B。事务A查询一张表中的数据后,事务B修改update了事务A查询的表并做了提交,事务A再次查询这张表,发现数据的不一致!

首先说明:mysql的innodb存储引擎默认的隔离级别就是 repeatable read 可重复读

1.首先开启两个mysql连接,分别开启两个事务A,事务B;两个事务分别查询 software 表的数据,此时数据显示一致的。

1)事务A

2)事务B

3)事务A此时修改了sid = 4 的version ,select 可以查看当前修改的结果,但是还没有提交commit!

4)事务B select * from software;查看software是否有修改,发现没有被修改!

5)事务A,做commit提交;并查看select * from software;

6)事务B,在 5)中事务A做了提交之后,事务B此时是查看不到 事务A对 sid = 4 的version做出的修改的!

7)事务B,执行update software set version = version + 1; 并执行select * from software; 查看,发现出现了幻读。

sid = 4 的 version 是在事务A提交后的结果 version = 44 上进行了 + 1 的操作!

总结:幻读的实现场景:事务B先后查询software表出现的结果,与预想的update 后 version+1 的结果出现了不一致。

另外:事务A,事务B同时对software表的同一条记录做修改,后执行的事务可能会执行失败,此时可能会发生行锁的lock情况,执行不成功。后执行的事务必须等待先执行的事务先commit或者rollback,才能对这同一条要修改的记录作出修改;

如:事务A与事务B同时开启,事务A先对sid = 4 的version做修改update。事务B再修改sid的version

1>事务A,此时事务A还没有作出提交commit。

2>事务B 报错ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

发生了行锁,sid= 4 的记录被事务A锁住了,等待事务A作出提交commit或rollback超时。

3>当事务A作出了commit之后,事务B在执行update如下,就可以成功update了

MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景相关推荐

  1. 「Mysql 事务 隔离级别」 读提交和可重复读的区别

    一.前提 首先我们应该先明确 Mysql的四种隔离级别和四种对应的现象 隔离级别: 读未提交.读已提交.可重复读.串行化 现象: 脏读.丢失修改.不可重复读.幻读 二.先说结论 读提交和可重复读都是一 ...

  2. 看完这篇文章,让你彻底理解事务隔离级别(读未提交、读已提交、可重复读、序列化)

    对于不同的事务,采用不同的隔离级别分别有不同的现象.主要有下面3种: 1.脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据. 2.不可重复读(nonrepeatable re ...

  3. 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别

    http://www.cnblogs.com/adforce/archive/2011/04/20/2021929.html 一.脏读.不可重复读.幻读 1.脏读:脏读就是指当一个事务正在访问数据,并 ...

  4. MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现

    文章目录 ACID 原子性 一致性 持久性 隔离性 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed ...

  5. mysql事务的acid、三种并发问题与四种隔离级别

    这里写目录标题 事物的ACID 事物并非下所引发的三种问题 以MYSQL数据库来分析四种隔离级别 mysql相关操作 Spring事物的传播行为 事物的ACID 事务是一个不可分割的数据库操作序列,是 ...

  6. mysql不可重复读是锁的表吗_Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  7. mysql特性举例_MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2 ...

  8. Mysql存储级别_mysql 存储引擎分类和事务隔离级别

    mysql 存储引擎分类 myisam和innodb的区别 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条S ...

  9. mysql mvcc 读写阻塞_mysql面试题MVCC原理事务隔离级别_aiailingfei的博客-CSDN博客

    原文作者:小小一只鸟 原文标题:mysql面试题MVCC原理事务隔离级别 发布时间:2021-01-19 19:43:38 mysql事务隔离级别可重复读面试题 熊大 话说今天漂亮的妹子给我发过一张图 ...

最新文章

  1. MarkDown入门及技巧
  2. Postgresql在CentOS上的安装(脚本在线安装)
  3. sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
  4. python 控制qq_最必要的最小建议集:写给刚入门编程(python)的同学
  5. 使用ArchUnit验证代码和体系结构约束
  6. Linux(11)--(历史命令)Ctrl+r, history,!
  7. hdu - 3415 Max Sum of Max-K-sub-sequence
  8. linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本
  9. BootStrap Table和Mybatis Plus实现服务端分页
  10. Windows下调试hadoop
  11. Spring事务原理分析(二)--@Transactional事务属性的解析
  12. 2022首届(江西)功能性农业农业大健康大会暨中国农民丰收节交易会
  13. Spring源码全解
  14. java 多音词语转拼音_py4j汉语转拼音多音字处理
  15. ubuntu20下使用微信开发者工具
  16. 越来越卷,教你使用Python实现卷积神经网络(CNN)
  17. 仰天大笑出门去,我辈岂是蓬蒿人。
  18. Android电视清理系统应用,【教程】无需root!卸载小米电视/盒子内置应用竟如此简单...
  19. ARANGODB INSTALL
  20. IconMaker:一款好用的图标制作工具

热门文章

  1. foxmail配置qq邮箱(需要在QQ邮箱设置第三方授权码
  2. Java操作文件Path 和 Paths 及Files类介绍
  3. 用PIL制作手绘风格滤镜
  4. springboot的基本增删改查
  5. Easyui DataGrid 改变单元格样式
  6. 服务器 不断电系统,内建 UPS 不断电系统 Aurender ACS100 音乐服务器
  7. 【C】C语言函数(包括:函数编写位置、数组作函数实参)
  8. 怎样在Mac上剪切和粘贴文件和文件夹?
  9. 我收藏的全部是精品美女,最经典的
  10. 设计师们各种实用网站