插入新记录
我们注意到,如果用gap lock锁住(4,7)和(7,9),确实能防止记录7的前后插入数据,但也使col=5、col=6等数据的插入被阻塞。...比如有记录4,6,8,属性为col, 有非唯一索引。...执行select * from t where col > 7
则要锁上(6,8],(8,+∞),因为要防止其他事务在空隙插入col>7的数据,比如新插入col=8的数据,将放置在记录8的前面或后面。...所以,即使可能会"误伤",使col=7的数据无法插入,也没有办法,因为gap lock是施加在索引上的,你只能一次性获取(6,8)整个空隙的锁。...执行select * from t where col > 5 and col < 7
则要锁上(4,6]和(6,8)。