查看同一张表上的以下事务:
T1 SELECTs 获得了哪些变化?
对于 Oracle,具有默认隔离级别(已提交读)
T1,先选择->没有看到任何变化 T1,第二次选择 -> 看不到 T2 的任何变化 T1,第三次选择 -> 没有看到 T3 的任何变化,但看到了 T2 的变化(幻读) T1,第四次选择 -> 查看所有更改(幻读)
所以基本上任何提交的东西对 T1 都是可见的。
Oracle 明确支持 READ COMMITTED,它声明事务可能只读取数据库中已提交的数据。没有脏读(未提交数据的读取)。
在上述场景中,T1 只是 SELECT 数据,T2 操作数据(更新、删除)和 T3 插入数据。根据事务中的 COMMIT 时间,不会发生死锁,T1 可以看到以下内容:
第三个 SELECT :来自 T2 的更改将是可见的(但不是来自 T3)。第四次选择:从 T2 和 T3 改变。对其他查询(第一个和第二个)不可用的更改。
由于 Oracle 默认的 ISOLATTION Level 设置,在任何事务中 COMMIT 之前,任何其他事务都不会看到数据。