ORACLE中为何COMMIT之前其他会话读不到更新的数据
5个回答
展开全部
这个是事务的隔离性。
解释:读取的数据只能是读取到commit之前的事务位置,也就是说如果没有commit的事务,通过rollback的位置是另外的读取语句的执行位置,所以在本事务提交之前,肯定是不能读取到的。
事务的四个特性:
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
解释:读取的数据只能是读取到commit之前的事务位置,也就是说如果没有commit的事务,通过rollback的位置是另外的读取语句的执行位置,所以在本事务提交之前,肯定是不能读取到的。
事务的四个特性:
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
展开全部
这就是Oracle数据库二次提交的独特性,以此保证数据的读一致性。当一个用户正在修改数据并没有发出commit时,说明数据更新还没有结束,此时别的用户只能看到修改前数据,这是正确的。一旦执行了commit语句,标志着数据更新结束,数据库中的数据也已更新,此时任何用户再访问数据已是更新后的了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为了保证数据的一致性,如果别人在你没有commit之前就读到你的数据了,而你又rollbak了,那他读到的那个数据会误导别人做出错误的判断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就是oracle的事务隔离性,因为在你没有提交前,其它会话是从回滚段里取数据。
更多追问追答
追问
非常感谢啊,那COMMIT后又是从哪里读取数据呢?
追答
commit后,如果内存里面有就从内存里面读,如果没有,就会从数据文件里面读。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要的就是这个效果,防止脏读
追问
为何脏读不好呢?
追答
心急的读取也许会访问到写入一般的数据,据此处理的话,业务逻辑就是错误的啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询