我是交易新手。当我阅读“事务信息系统”一书时,提到 B-tree 使用键范围锁定来保证可串行化。这是真的所有对关系的访问都必须通过相同的 B-tree 进行以保证可序列化吗?
如果我理解正确,如果访问是通过不同的索引,则无法保证可序列化。请参阅以下示例。
假设同一个关系上有两个索引,分别是B树和哈希索引,并且有两个事务。
首先,一个事务使用散列索引读取关系,例如,fetchkey(16)
使用键获取(当前不存在的)记录16
并且找不到匹配项。由于散列没有键范围锁定,它不能锁定下一个键。然后,另一个事务通过 B-tree 插入一条键为 '16' 的记录。插入将成功,导致幻像。