FAQ
Q: insert 语句上锁需要 rid 信息,但是 rid 需要在 insert 完成之后才能获得,如何在 insert 开始前获取 rid 并加锁呢?
A: 目前的实验框架仅考虑事务级别的并发查询,没有对 SQL 语句级别的并发查询做相应支持,即数据库在任意时刻只能执行一条查询,不存在多条查询的并发执行,对单条语句的 insert 和加锁这两个操作的顺序没有要求,可以在 insert 之后再对相应的数据行加锁。
Q: 可串行化隔离级别中的锁是按照什么规则加的,为何我的实现方式无法通过测例?
A: 多版本并发控制下可串行化隔离的实现方式有很多种,不同的实现方式可能有不同的效果,在这里说明一下实验中使用的规则:对于普通的 select 语句(不含 for share 和 for update),只对表加意向共享锁,不加行锁;包含 for share 和 for update 的 select 语句,除了对表加意向锁外,还需要对相应数据行分别加共享锁和互斥锁;对于数据修改操作,对表加意向互斥锁,对修改的数据行加互斥锁。