isolation-clause
隔离子句指定了语句执行的隔离级别。 (隔离级别不适用于已声明的临时表,因为不会获取任何锁。)
隔离子句的语法
隔离子句描述
- RR
- 可重复读取
- RR锁定条款
- 在所有访问的页面和行中,使用并保留锁定条款中指定的锁定类型,以便重复读取
- RS
- 读取稳定性
- RS锁定条款
- 在所有访问的页面和行中,使用并保留锁定条款中指定的锁定类型,以确保稳定性
- CS
- 光标稳定性
- UR
- 未提交的读取
- 锁定条款
- 指定锁的类型。
- 使用并保管好专用锁具
- 使用并更新锁
- 使用并保管好共享锁
- 指定 Db2 分别获取并持有X、U或S锁。
只有在fullselect或SELECT INTO语句的结果表为只读时,才能指定WITH UR。
在 ODBC 应用程序中,可以使用 SQLSetStmtAttr 功能设置与 锁定子句交互的语句属性。 如果 SQLSetStmtAttr 被调用,并指定其SQL_ATTR_CLOSE_BEHAVIOR为SQL_CC_RELEASE(当游标关闭时释放锁),则无论是否有任何锁定子句 ,游标使用的、不需要保护更改数据完整性的锁都会被释放。
虽然请求更新或独占锁定可以减少并发,但它可以防止某些类型的死锁。
语句的默认隔离级别取决于:
- 声明所附文件或计划的独立性
- 结果表是否为只读
表1 显示了语句的默认隔离级别。
如果软件包隔离是: | 计划隔离是: | 结果如下: | 默认的隔离是: |
---|---|---|---|
RR | 任意 | 任意 | RR |
RS | 任意 | 任意 | RS |
CS | 任意 | 任意 | CS |
UR | 任意 | 只读 | UR |
非只读 | CS | ||
未指定 | 未指定 | 任意 | RR |
RR | 任意 | RR | |
RS | 任意 | RS | |
CS | 任意 | CS | |
UR | 只读 | UR | |
非只读 | CS |
确保结果表为只读状态的一个简单方法是,在 SQL 语句中指定 FOR READ ONLY。
其他语法和同义词 :KEEP UPDATE LOCKS可以作为USE AND KEEP EXCLUSIVE LOCKS的同义词。 但是,只有在指定了 FOR UPDATE OF 时才能指定 KEEP UPDATE LOCKS,并且 SELECT INTO 语句不支持该选项。