什么是范围锁?

时间:2012-08-29 13:30:34

标签: database

好吧,主题介绍维基百科中的隔离有这样的词,链接是here

......... 序列化 这是最高的隔离级别。 使用基于锁的并发控制DBMS实现,可序列化需要在事务结束时释放读取和写入锁(在所选数据上获取)。当SELECT查询使用ranged WHERE子句时,也必须获取 range-locks ,尤其是为了避免幻像读取现象(见下文)。 使用基于非锁定的并发控制时,不会获取锁定;但是,如果系统检测到多个并发事务之间的写冲突,则只允许其中一个事务提交。有关此主题的更多详细信息,请参阅快照隔离。

但是整个主题没有解释“范围锁定”,谷歌也没有准确的描述。

什么是“范围锁定”,哪个与“读锁定”和“写锁定”不同?

谢谢!

2 个答案:

答案 0 :(得分:9)

如果使用WHERE子句中的范围,数据库将锁定此范围内的每个可能元组以及下一个元组(之前和之后)。如果方向上没有下一个元组可用,它将完全锁定在这个方向上。

因此SELECT在交易中是可靠的。

答案 1 :(得分:9)

使用锁定(并非所有数据库都使用锁定)来防止并发操作冲突的最简单方法是锁定整个数据库。然而,这将逐一制造所有东西,这将非常缓慢。

接下来,是你锁定整个表格。至少其他表格不会放慢速度。

最窄的是锁定一行。您可以安全地更新该行,而不是阻止其他操作。

范围锁定在最后两个之间。它使用的案例包括:

  1. 查询会影响一系列值。
  2. 查询会影响非唯一索引(因为可能有多个行匹配,例如23,因此23标识范围而不是行。
  3. 插入新的自动递增密钥(锁定范围max(curvalue) + indexincrement)。