在修改时锁定

当数据库服务器通过更新游标访存行时,它在访存的行上放置可提升锁。如果此操作成功,则数据库服务器知道没有其他程序可改变那一行。由于可提升锁不是排他的,其他程序可继续读取该行。由于访存该行的程序可在它发出 UPDATE 或 DELETE 语句之前花费一些时间,或它仅可访存下一行,因此,可提升锁可提升性能。当到了修改行时,数据库服务器获取该行上的排他锁。如果已有可提升锁,则它将那个锁更改为排他的状态。

排他的行锁的持续时间依赖于是否在使用事务。如果未使用事务,则将修改了的行一写到磁盘就释放该锁。当在使用事务时,保留所有这些锁,直到事务结束为止。此操作防止其他程序使用那些可能回滚到它们的原始状态的行。

当在使用事务时,每当删除行时,就使用键锁。使用键锁防止发生下列错误:

通过锁定索引,数据库服务器防止第二个程序插入行,直到第一个程序提交它的事务为止。

当前的隔离级别控制在数据库服务器读取不同的行时放置的锁,如下一部分中讨论的那样。