DB2“WITH(HOLDLOCK)”等效

时间:2011-01-20 22:12:34

标签: sql db2

在SQL Server中,我可以编写以下内容:

UPDATE myTable WITH (HOLDLOCK) SET myIntColumn = 123

我需要将此语句移植到DB2。什么相当于“WITH(HOLDLOCK)”?

1 个答案:

答案 0 :(得分:3)

DB2中的等效语句就是

UPDATE myTable SET myIntColumn = 123

DB2将对受UPDATE语句影响的行保持锁定,直到提交事务为止。

一些注释:

1)如果您未在应用程序中设置autoCommit,则只要此语句完成执行,就会隐式提交事务。通常默认启用autoCommit。

2)DB2 9.7添加了当前提交的锁定语义,即使在行被锁定但尚未提交时,它也允许其他应用程序读取已提交的数据(这与Oracle使用回滚段的方式类似)。如果您正在运行DB2 9.7并且担心其他应用程序读取您正在更新的行的“旧”版本,则可能需要考虑这一点。 Documentation for Currently Committed Semantics

3)如果您正在读取游标并有选择地更新结果集中的行(即UPDATE myTable ST myIntColumn = 123 WHERE CURRENT OF cursor),并且您希望DB2对结果集中尚未更新的其他行保持锁定,则您需要查看使用不同的语句隔离级别(即读取稳定性或可重复读取)。