什么是范围锁?

kur*_*.ye 12 database

好吧,主题介绍维基百科中的隔离有这样的话,链接在这里

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

但整个主题没有解释"范围锁定",谷歌也没有准确的描述.

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

谢谢!

Jon*_*nna 10

使用锁定(并非所有数据库都使用锁定)来防止并发操作冲突的最简单方法是锁定整个数据库.这会使一切都一个接一个,但速度会非常慢.

接下来,如果你锁定整个表.至少其他表格不会减慢速度.

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

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

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


edz*_*dze 9

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

所以SELECT在交易中是可靠的.

  • 这不仅仅是'BETWEEN`.只要选择不是针对单个唯一行,您就可以获得范围锁定.`SELECT*FROM Users WHERE LastName ='Adams'`是一个范围,因为它可以返回多行,并且没有BETWEEN子句. (3认同)