Oracle学习笔记20150901脏读不可重复读以及幻读概念理解
来源:互联网 发布:mac鼠标右键设置 编辑:程序博客网 时间:2024/06/07 04:06
1.脏读幻读不可重复读概念
脏读:(关键点在于事务T2读取到了T1没有持久化的修改的数据)又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的(Oracle中不支持脏读,如果T1未提交数据则T2无法查询到T1所修改但是未提交的数据.)
不可重复读:(关键点在于事务T1进行多次读取同一行数据返回的结果集由于事务T2的操作而不同,如果T2的操作没有持久化那么这种情况也同时属于脏读)即原始读取不可重复 .是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。比如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。
幻读(虚读) phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。
摘录自其他人的博客:
1.这里是另一个csdn大神非常清晰的总结,这里摘录一部分,完整版链接:这里是链接
脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。
不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。
虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。
2.这里是转载自另一个大神09年05月的总结链接为这里是链接
1, 脏读
一个事务读到另一个事务,尚未提交的修改,就是脏读。这里所谓的修改,除了Update操作,不要忘了,还包括
Insert和Delete操作。
脏读的后果:如果后一个事务回滚,那么它所做的修改,统统都会被撤销。前一个事务读到的数据,就是垃圾数据。
举个例子:预订房间。
有一张Reservation表,往表中插入一条记录,来订购一个房间。
事务1:在Reservation表中插入一条记录,用于预订99号房间。
事务2:查询,尚未预定的房间列表,因为99号房间,已经被事务1预订。所以不在列表中。
事务1:信用卡付款。由于付款失败,导致整个事务回滚。
所以插入到Reservation 表中的记录并不置为持久(即它将被删除)。
现在99号房间则为可用。
所以,事务2所用的是一个无效的房间列表,因为99号房间,已经可用。如果它是最后一个没有被预定的房间,那么这将是一个严重的失误。
注:脏读的后果很严重。
2,不可重复读。
在同一个事务中,再次读取数据时【就是你的select操作】,所读取的数据,和第1次读取的数据,不一样了。就是不可重复读。
举个例子:
事务1:查询有双人床房间。99号房间,有双人床。
事务2:将99号房间,改成单人床房间。
事务1:再次执行查询,请求所有双人床房间列表,99号房间不再列表中了。也就是说,
事务1,可以看到其他事务所做的修改。
在不可重复读,里面,可以看到其他事务所做的修改,而导致2次的查询结果不再一样了。
这里的修改,是提交过的。也可以是没有提交的,这种情况同时也是脏读。
如果,数据库系统的隔离级别。允许,不可重复读。那么你启动一个事务,并做一个select查询操作。
查询到的数据,就有可能,和你第2次,3次...n次,查询到的数据不一样。一般情况下,你只会做一次,select
查询,并以这一次的查询数据,作为后续计算的基础。因为允许出现,不可重复读。那么任何
时候,查询到的数据,都有可能被其他事务更新,查询的结果将是不确定的。
注:如果允许,不可重复读,你的查询结果,将是不确定的。一个不确定的结果,你能容忍吗?
3,幻读
事务1读取指定的where子句所返回的一些行。然后,事务2插入一个新行,这个新行也满足事务1使用的查询
where子句。然后事务1再次使用相同的查询读取行,但是现在它看到了事务2刚插入的行。这个行被称为幻象,
因为对事务1来说,这一行的出现是不可思议的。
举个例子:
事务1:请求没有预定的,双人床房间列表。
事务2:向Reservation表中插入一个新纪录,以预订99号房间,并提交。
事务1:再次请求有双人床的未预定的房间列表,99号房间,不再位于列表中。
注:幻读,针对的是,Insert操作。如果事务2,插入的记录,没有提交。那么同时也是脏读。
- Oracle学习笔记20150901脏读不可重复读以及幻读概念理解
- 数据库的脏读、不可重复读、幻读以及不可重复读和幻读的区别
- 数据库的脏读、不可重复读、幻读以及不可重复读和幻读的区别
- 数据库的脏读、不可重复读、幻读以及不可重复读和幻读的区别
- 数据库的脏读、不可重复读、幻读以及不可重复读和幻读的区别
- 脏读和不可重复读的相关概念
- 脏读,不可重复读,幻读的概念
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 事务的脏读、幻读、不可重复读的理解
- 【笔记】 事务管理中的脏读, 幻读,不可重复读
- 对于脏读,不可重复读,幻读的一点理解,看懂红字很关键
- 数据4种隔离级别,以及脏读、不可重复读、幻读定义
- 什么是脏读、不可重复读、幻读
- linux 下安装pyhton
- post 请求 与上传
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
- 2015年夏--致1434010105班
- ZOJ2358解题报告
- Oracle学习笔记20150901脏读不可重复读以及幻读概念理解
- Android杂谈之网络实时监测
- 10.3-2 10.3-3
- html 的table
- Android “fragment” 替换 “Tabhost”技术
- C++中const的使用
- 1的个数
- 自动化测试理解
- delphi 各新版本特性收集