在SQL Server中,我可以编写以下内容:
UPDATE myTable WITH (HOLDLOCK) SET myIntColumn = 123
我需要将此语句移植到DB2。什么相当于“WITH(HOLDLOCK)”?
答案 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对结果集中尚未更新的其他行保持锁定,则您需要查看使用不同的语句隔离级别(即读取稳定性或可重复读取)。