ORACLE中为何COMMIT之前其他会话读不到更新的数据

 我来答
198901245631
推荐于2016-05-30 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1661万
展开全部
这个是事务的隔离性。
解释:读取的数据只能是读取到commit之前的事务位置,也就是说如果没有commit的事务,通过rollback的位置是另外的读取语句的执行位置,所以在本事务提交之前,肯定是不能读取到的。
事务的四个特性:
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
随o天
2012-11-02 · TA获得超过3158个赞
知道大有可为答主
回答量:1740
采纳率:71%
帮助的人:1999万
展开全部
这就是Oracle数据库二次提交的独特性,以此保证数据的读一致性。当一个用户正在修改数据并没有发出commit时,说明数据更新还没有结束,此时别的用户只能看到修改前数据,这是正确的。一旦执行了commit语句,标志着数据更新结束,数据库中的数据也已更新,此时任何用户再访问数据已是更新后的了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxr_303
2012-11-02 · TA获得超过473个赞
知道小有建树答主
回答量:875
采纳率:0%
帮助的人:507万
展开全部
为了保证数据的一致性,如果别人在你没有commit之前就读到你的数据了,而你又rollbak了,那他读到的那个数据会误导别人做出错误的判断。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知识杂集
2012-11-02 · TA获得超过200个赞
知道小有建树答主
回答量:270
采纳率:0%
帮助的人:204万
展开全部
这就是oracle的事务隔离性,因为在你没有提交前,其它会话是从回滚段里取数据。
更多追问追答
追问
非常感谢啊,那COMMIT后又是从哪里读取数据呢?
追答
commit后,如果内存里面有就从内存里面读,如果没有,就会从数据文件里面读。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一刀转战三千里
2012-11-02 · 超过16用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:37.7万
展开全部
要的就是这个效果,防止脏读
追问
为何脏读不好呢?
追答
心急的读取也许会访问到写入一般的数据,据此处理的话,业务逻辑就是错误的啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式