伴随着事务的不同隔离等级,会出现不同的读取现象。ANSI/ISO 标准 SQL 92指出两个事务并发执行,一个事务读数据,另一个事务写数据时可能出现的三种情况。

  1. 幻影读(Phantom reads)
    事务T1进行两次相同的查询,前后2次查询的结果由于事务T2插入了新数据产生了不同的结果。
T1                                                                    T2
select * from account where balance > 100; insert into account(balance) values(200);commit;
select * from account where balance > 100;
commit;

事务T1由于第二次查询结果多了事务T2新插入的值,和第一次查询时的结果不一致,多出了一条 balance = 200 的数据。
这种情况在低于串行化(Serializable)的隔离等级:可重复的读(Repeatable Read), 读已提交(Read Commited), 读未提交(Read Uncommited)下会发生。

  1. 不可重复读(None-repeatable reads)
    事务T1对同一数据进行两次查询,由于事务T2对相同数据的修改,导致事务T1前后两次查询结果
    不一致(不可重复)。
T1                                                                    T2
select * from account where id = 1; update account set balance = 200 where id = 1;commit;
select * from account where id = 1;
commit;

假设事务T1第一次查询后的结果balance = 100,由于事务T2的介入,第二次对同一数据的查询将会得到和第一次不同的结果balance = 200。
这种情况在低于可重复读(Repeatable Read的)隔离等级:读已提交(Read Commited), 读未提交(Read Uncommited)下会发生。

  1. 脏读(Dirty reads)
    事务T1读取到事务T2更新却未提交的数据,随后由于回滚或者更新覆盖导致事务T1读取到无效数据。
T1                                                                    T2update account set balance = 200 where id = 1;
select * from account where id = 1;
commit;rollback;

由于事务T2的缘故,事务T1将会读取到 balance = 200 的结果,但是事务T2随后进行了回滚,事务T1读取了无效数据。
这种情况在低于读已提交(Read Commited)的隔离等级:读未提交(Read Uncommited)下会发生。

上诉三种情况,从下到上,为了避免相应的情况发生,要求的隔离等级依次升高。

事物并发读写的可能:幻影读-不可重复读-脏读相关推荐

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

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

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

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

  3. mysql悲观锁会有脏数据吗_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...

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

  4. MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /*   Transaction control language : 事物控制语言   事务:     一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...

  5. mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读

    事务的四大特征 原子性(atomicity):要么全部提交(commit),要么全部回滚(rollback) 一致性(consistency):数据从一个合法状态转换成另一种合法状态 隔离性(isol ...

  6. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

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

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

  8. 数据库事务处理差异:可提交读和重复读区别

    数据库隔离级别:读未提交  读已提交  可重复读  序列化 oracle     sql server 读已提交 mysq                       可重复读 https://clo ...

  9. 事务的4种隔离级别,3大问题,脏读幻读不可重复读

    一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...

最新文章

  1. Linux环境变量说明与配置
  2. 初级c 语言题库,c 语言题库.doc
  3. 2022-03-22
  4. QT的QMessageBox类的使用
  5. mysql 8 my.cfg_搭建lamp环境以及安装配置phpmyadmin
  6. C开源hash代码uthash的用法总结(1)
  7. canvas 实现图片局部模糊_Canvas绘制图片模糊
  8. 珍藏版仅30M迷你版Microsoft Office(Win10可用)
  9. sumo 教程——高速公路
  10. 蓝牙耳机无法与计算机连接,蓝牙耳机与电脑无法配对、或者连接不上
  11. [PyQt] MCV模式学习-0
  12. 阿里云视频点播+项目实战
  13. Macbook电池使用问题——电池充电管理
  14. 什么是IT咨询?IT外包又是什么?
  15. elasticsearch OOM
  16. Linux运维,到底如何入门?常用linux操作指令盘点!
  17. 系统流量变化的原因与微型气泵的关系
  18. win7电脑蓝屏没有修复计算机,电脑win7开机蓝屏怎么办_win7系统一开机就蓝屏解决方法...
  19. 小米运动蓝牙耳机重新配对_小米运动蓝牙耳机怎么重置
  20. Android自定义View之年度账单曲线图

热门文章

  1. taskAffinity属性的奇特效果
  2. Foreign data wrappers
  3. 浅谈“自动化技术对世界的影响”
  4. Android自定义手绘板 签字板
  5. opencv学习-第1节:环境配置与搭建
  6. 查看服务器内存和硬盘命令,命令查看Linux服务器内存、CPU、显卡、硬盘使用情况...
  7. 锂电池座充LCD显示屏数码充电器方案设计开发
  8. 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2
  9. 界面设计--java
  10. Splay学习笔记,每个操作都会执行splay。