0

查看同一张表上的以下事务:

在此处输入图像描述

T1 SELECTs 获得了哪些变化?

4

2 回答 2

1

对于 Oracle,具有默认隔离级别(已提交读)

T1,先选择->没有看到任何变化
T1,第二次选择 -> 看不到 T2 的任何变化
T1,第三次选择 -> 没有看到 T3 的任何变化,但看到了 T2 的变化(幻读)
T1,第四次选择 -> 查看所有更改(幻读)

所以基本上任何提交的东西对 T1 都是可见的。

于 2013-10-06T23:36:51.210 回答
0

Oracle 明确支持 READ COMMITTED,它声明事务可能只读取数据库中已提交的数据。没有脏读(未提交数据的读取)。

在上述场景中,T1 只是 SELECT 数据,T2 操作数据(更新、删除)和 T3 插入数据。根据事务中的 COMMIT 时间,不会发生死锁,T1 可以看到以下内容:

第三个 SELECT :来自 T2 的更改将是可见的(但不是来自 T3)。第四次选择:从 T2 和 T3 改变。对其他查询(第一个和第二个)不可用的更改。

由于 Oracle 默认的 ISOLATTION Level 设置,在任何事务中 COMMIT 之前,任何其他事务都不会看到数据。

于 2013-10-07T00:22:11.397 回答