10.3  隔离级别(Isolation Levels)

维护数据库的一致性和数据完整性,同时又允许多个应用程序同时访问同一数据,这样的特性称为并发性。DB2数据库用来尝试强制实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据。DB2使用下列隔离级别来强制实施并发性:

可重复读(Repeatable Read)

读稳定性(Read Stability)

游标稳定性(Cursor Stability)

未提交读(Uncommitted Read)

可重复读隔离级别可以防止所有现象,但是会大大降低并发性(可以同时访问同一资源的事务数量)。未提交读隔离级别提供了最大的并发性,但是"脏读"、"幻像读"和"不可重复读"都可能出现。默认的隔离级别是CS。

10.3.1  可重复读(RR-Repeatable Read)

可重复读隔离级别是最严格的隔离级别。在该隔离级别下,一个事务的影响完全与其他并发事务隔离,脏读、不可重复的读、幻像读现象都不会发生。当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。因此,如果在同一个事务中发出同一个SELECT语句两次或更多次,那么产生的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或回滚操作终止该事务。但是,在事务存在期间,不允许其他事务执行会影响这个事务正在访问的任何行的插入、更新或删除操作。为了确保这种行为不会发生,锁定该事务所引用的每一行-- 而不是仅锁定被实际检索或修改的那些行。因此,如果一个事务扫描了1000行,但只检索10行,那么它所扫描的1000行(而不仅是被检索的10行)都会被锁定。

那么在现实环境中可重复读隔离级别是如何工作的呢?假定如家酒店使用DB2数据库跟踪如家酒店的客房信息,包括房间预订和房价信息,还有一个基于Web的应用程序,它允许顾客按"先到先服务"的原则预订房间。如果旅馆预订应用程序是在可重复读隔离级别下运行的,当顾客扫描某个日期段内的可用房间列表时,您(旅馆经理)将无法更改那些房间在指定日期范围内的房价。同样,其他顾客也无法进行或取消将会更改该列表的预订(直到第一个顾客的事务终止为止)。图10-6说明了这种行为。

 
(点击查看大图)图10-6  可重复读隔离级别的示例

在使用可重复读隔离级别时,一个事务中所有被读取过的行上都会被加上S锁,直到该事务被提交或回滚,行上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,得到的值也不会改变。另外,在同一事务中即使以同样的搜索标准重新打开已被处理过的游标,得到的结果集也不会改变。可重复读相对于读稳定性而言,加锁的范围更大。对于读稳定性,应用程序只对符合要求的所有行加锁;而对于可重复读,应用程序将对所有被扫描过的行都加锁。

可重复读(RR)会锁定应用程序在工作单元中引用的所有行。利用"可重复读",在打开游标的相同工作单元内一个应用程序发出一个SELECT语句两次,每次都返回相同的结果。利用"可重复读",不可能出现丢失更新、脏读和幻像读的情况。

在该工作单元完成之前,"可重复读"应用程序可以尽可能多次地检索和操作这些行。但是,在该工作单元完成之前其他应用程序均不能更新、删除或插入可能会影响结果表的行。"可重复读"应用程序不能查看其他应用程序的未落实更改。

隔离级别(Isolation Levels)-------可重复读(RR-Repeatable Read)相关推荐

  1. Mysql默认隔离级别为什么是可重复读?

    知识点总结 1.数据库默认隔离级别: mysql -可重复读: oracle,postgres -已提交读 2.mysql binlog的格式三种:statement,row,mixed 3.为什么m ...

  2. [转]为什么mysql默认隔离级别设置为可重复读

    一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQLServer等,而MySQL却使用可重复读(Read-Repeatable,RR).要 ...

  3. 专题-子项-1-mysqlf-默认隔离级别为什么是可重复读?为什么业务代码建议用读已提交?

    经典参考:https://blog.csdn.net/java_collect/article/details/105042975 binlog有几种格式? 三种,分别是 ----statement: ...

  4. mysql隔离级别 isolation_事物的隔离级别isolation

    事物的隔离级别isolation (一)数据读取现象 www.2cto.com 1.脏读.读取到未提交的数据. 2.不可重复读.同一个事物中,同一个语句读取两次,结果不一样. 3.幻读.同一事物中,由 ...

  5. 可重复读(Repeatable read)能防住幻读吗?

    文章目录 可重复读(Repeatable read)能防住幻读吗? 事务隔离级别 事务的并发问题 概念 幻读和不可重复读的区别 乐观锁与悲观锁 悲观锁 乐观锁 数据版本 MVCC 当前读 Next-K ...

  6. 正确理解MYSQL事务的可重复读RR隔离级别与锁

    1,mysql默认的事务隔离级别是可重复度. 可重复度就是在一个事务中对相同数据的多次查询将返回相同结果. 比如 事务1: BEGIN; SELECT age from student where i ...

  7. 一图看懂MVCC机制,RC级别解决脏读问题,RR级别怎么解决不可重复读问题【MySQL系列】

    说起事务隔离级别和各自解决的问题,相信学过MySQL的人都倒背如流, 三类问题:脏读.不可重复读.幻读问题: 四种隔离级别: 读不提交,最低的隔离级别,存在脏读.不可重复读.幻读问题: 读已提交,能解 ...

  8. 简单聊聊mysql的脏读、不可重复读、幻读

    最近,在一次 mysql 死锁的生产事故中,我发现,关于 mysql 的锁.事务等等,我所知道的东西太碎了,所以,我试着用几个例子将它们串起来.具体做法就是通过不断地问问题.回答问题,再加上" ...

  9. Spring Boot 2.x 事务处理(一篇长文让你读懂什么是隔离级别和传播行为)

    写在前面 在互联网发达的时代里,对于那些电商和金融网站,最关注的的内容毫无疑问就是数据库事务,因为对于热门商品的交易和库存以及金融产品的金额,是绝对不允许发生错误的.面对这样的高并发场景,掌握数据库事 ...

最新文章

  1. “云上金融,智创未来” 腾讯“云+未来”峰会金融专场在广州举行
  2. chrome表单自动填充去掉input黄色背景
  3. golang中的mysql类型对应
  4. Kubernetes中Service的种类
  5. LeetCode - Reverse Nodes in k-Group
  6. php三位不够前面加0,php 格式化数字 位数不足前面加0补足的实现方法
  7. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
  8. NgRx 和 Angular CLI 版本不一致的错误
  9. 编程:使用递归方式判断某个字串是否回文(Palindrome)
  10. 初识JS-基础中的基础
  11. 解决Ubuntu下VNC客户端无法输入s和m的方法
  12. redis_学习_02_redis 可视化工具 Redis Desktop Manager
  13. C语言ASCII码转换
  14. TRNSYS模块中英文对照
  15. TensorFlow cifar 卷积网络
  16. xp启用计算机共享打印机,Win7共享XP打印机设置方法【win7不能共享xp打印机】解决方法...
  17. RationalDMIS7.1定制报告(Excel模板制作)
  18. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?
  19. telegram怎么搜索机器人_telegram机器人
  20. 桌面和文件管理器右键卡顿几秒的解决办法

热门文章

  1. 通过QueryInterface接口查询和使用IDispatch 接口进行操作的对比。
  2. 计算机自带键盘无法使用,深度windows7旗舰版电脑自带的键盘无法使用了怎么办...
  3. cad怎么转换成pdf格式,3个方法快速搞定
  4. Java之类与对象(图文结合)
  5. java编写 每个苹果2.4元,第一天买2个苹果,第二天开始每天买前一天的2倍,直至一次购买的苹果个数达到不超过120的最大值,求每天平均花多少钱?
  6. 报错:IndexError: too many indices for array
  7. spring框架搭建与入门案例
  8. Linux - 查看磁盘空间占用
  9. RN-borderRadius 失效问题
  10. c51单片机led奇数偶数亮_单片机LED灯花式闪烁电路图及程序