[英]Behaviour of serializable transactions in oracle?
我有以下隔离级别为可序列化的事务序列
trnsaction1 transaction2
get row2 // value1
update row1
update row2//update to 2
commit
get row1
get row2 // lin6
事务2会看到行1和行2的更新值吗?确定事务2在行6不会看到行2的更新值(由事务1更新),但是不确定它会看到事务1的更新行1的更新值吗?
事务1提交工作后,事务2将在最后两行中看到更新的更改。 也就是说,除非您将SET TRANSACTION READ ONLY
将SET TRANSACTION READ ONLY
设为SET TRANSACTION READ ONLY
作为事务中的第一个操作。
在读写事务中,单个语句是读取一致的,但不在多个语句之间。
编辑:
史蒂夫,我认为那是不对的。 从文档中 :
[读取已提交的交易]
这是默认的事务隔离级别。 由事务执行的每个查询仅看到在查询(不是事务)开始之前提交的数据。 Oracle查询永远不会读取脏(未提交)的数据。
因为Oracle不会阻止其他事务修改查询读取的数据,所以可以在两次查询执行之间通过其他事务更改该数据。 因此,运行给定查询两次的事务可能会遇到不可重复的读取和幻象。
[可序列化]
可序列化的事务仅查看那些在事务开始时提交的更改,以及事务本身通过INSERT,UPDATE和DELETE语句所做的更改。 可序列化的事务不会经历不可重复的读取或幻象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.