可滚动游标和事务隔离

下表列出了控制更改可见性的因素。

更改发起因素: 可见性决定因素:
游标 游标类型、游标实现
同一事务中的其他语句 游标类型
其他事务中的语句 游标类型、事务隔离级别

这些因素如下图所示。

Factors governing the visibility of changes

下表汇总了每个游标类型能够检测自身、自身事务中的其他操作和其他事务所做的更改的能力。 后两种更改的可见性取决于游标类型和包含游标的事务的隔离级别。

游标类型\操作 Self Own

Txn
Othr

Txn

(RU[a])
Othr

Txn

(RC[a])
Othr

Txn

(RR[a])
Othr

Txn

(S[a])
静态
Insert Maybe[b] No No No
更新 Maybe[b] No No No
删除 Maybe[b] No No No
键集驱动
Insert Maybe[b] No No No
更新
删除 Maybe[b]
动态
Insert
更新
刪除

[a] 括号中的字母表示包含游标的事务的隔离级别;其他事务的隔离级别(在其中进行更改)与其无关。

RU:未提交读

RC:已提交读

RR:可重复读

S:可序列化

[b] 取决于游标的实现方式。 通过 SQLGetInfo 中的 SQL_STATIC_SENSITIVITY 选项报告游标是否可以检测此类更改。