保留更新锁

如果用户有低于 Repeatable Read 的隔离级别,则一旦从游标访存下一行,数据库服务器就释放放置在行上的更新锁。当您设置任何下列隔离级别时,使用此特性,您可使用 RETAIN UPDATE LOCKS 子句来保留更新锁,直到事务的结束为止:
  • Dirty Read
  • Committed Read
  • Cursor Stability

此特性允许您避免 Repeatable Read 隔离级别的开销或暂时避开诸如行上的假更新。当打开 RETAIN UPDATE LOCKS 特性,且在 SELECT...FOR UPDATE 语句的访存期间在行上隐式地放置更新锁时,直到事务的结束,才释放更新锁。使用 RETAIN UPDATE LOCKS 特性,仅保持更新锁,直到事务的结束为止,而 Repeatable Read 隔离级别同时保持更新锁和共享锁,直到会话的结束为止。

下列示例展示当您将隔离级别设置为 Committed Read 时,如何使用 RETAIN UPDATE LOCKS 子句。
SET ISOLATION TO COMMITTED READ RETAIN UPDATE LOCKS

要关闭 RETAIN UPDATE LOCKS 特性,请不要使用 RETAIN UPDATE LOCKS 子句来设置隔离级别。当您关闭该特性时,未直接地释放更新锁。然而,从此时起,后续的访存释放紧前的访存的更新锁,而不是更早的访存操作的更新锁。关闭的游标释放当前行上的更新锁。

要获取关于当您指定隔离级别时,如何使用 RETAIN UPDATE LOCKS 特性的更多信息,请参阅 GBase 8s SQL 指南:语法