R语言 父子元素 二代征信 callback swiftui ionic3 drupal7 Backbonejs vue表单提交 河南省普通话考试官网 spark项目 jquery事件绑定 jquery使用ajax web前端毕业设计题目 bootstrap图表 oracle无效的列索引 oracle查看数据库状态 linux关闭mysql js对象添加元素 查看nodejs版本 mysql或者条件 java接收数组 cad正在执行命令 python练习 python3正则表达式 python变量定义 python程序代码 java9 javafile java简介 java获取年份 java创建对象 linux硬盘 sql实例 php实例代码 方正流行体 内存整理软件 谷歌地球打不开 js绝对值 winterboard
当前位置: 首页 > 学习教程  > 编程语言

数据库事务隔离级别 不可重复读与幻读的区别

2020/11/4 13:58:05 文章标签:

精炼解释: 不可重复读的重点是修改: 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 幻读的重点在于新增或者删除 同样的条件, 第1次和第2次读出来的记录数不一样 当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致. 但如果你从控制的角…

精炼解释:

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

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

幻读的重点在于新增或者删除

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

当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致.

但如果你从控制的角度来看, 两者的区别就比较大
对于前者, 只需要锁住满足条件的记录
对于后者, 要锁住满足条件及其相近的记录

详细说明:

1、 “不可重复读” 是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题

要避免这种情况,通常可以用 set tran isolation level repeatable read 来设置隔离级别,这样事务A 在两次读取表T中的数据时,事务B如果企图更改表T中的数据(细节到事务A读取数据)时,就会被阻塞,知道事务A提交! 这样就保证了,事务A两次读取的数据的一致性。

2、幻觉读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。


本文链接: http://www.dtmao.cc/news_show_350039.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?