isolation-clause

隔离子句指定了语句执行的隔离级别。 (隔离级别不适用于已声明的临时表,因为不会获取任何锁。)

隔离子句的语法

阅读语法图跳过可视化语法图WITH RR锁定条款RS锁定条款CSUR
锁定条款
阅读语法图跳过可视化语法图USE AND KEEP EXCLUSIVEUPDATESHARE LOCKS

隔离子句描述

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 显示了语句的默认隔离级别。

表 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 语句不支持该选项。