浏览 4749 次
锁定老帖子 主题:淺談 oracle事务隔离级别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-16
根據官方資料,它們的區別如下: 动作 Read Committed Serializable Dirty write Not possible Not possible Dirty read Not possible Not possible Nonrepeatable read Possible Not possible Phantoms Possible Not possible Read committed 是默认的隔离级别。 对于Read committed ,事务中的查询只能看到在此查询之前( 而非事务开始之前 )提交的数据。 由于 oracle 不会因为查询数据而阻止另外一个事务修改数据,因此数据可以在一个事务中的 2 次查询中,查到不同的结果。因此 可能出现 nonrepeatable read and phantoms 的情况 对于serializable transactions ,当2次执行同一条查询语句的时候(就是两次执行查询,就是说执行完第一个 .executeQuery ,然后执行第二个 .executeQuery ),如果在第一个 .executeQuery 开始执行而另外一个事务已经开始修改数据,并且已经提交,那么两次读取的数据是另外一个事务修改前的数据。如果在第一个 .executeQuery 之前,另外一个事务修改了数据,那么两次读取的数据是另外一个事务修改后的数据。 这恰恰反映了, repeatable read ,两次结果一致 这与 Read committed 完全不同, 要是 Read committed ,第一个 .executeQuery 未执行完第二事务,而在第二个 .executeQuery 前第二个事务执行完毕,那么第一个 .executeQuery 得到的是初始数据,而第二个 .executeQuery 得到的是修改后的数据 恰恰说明了 nonrepeatable read ,两次结果不一致的情况 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |