间隙锁是可重复读级别下才会有的锁,结合MVCC和间隙锁可以解决幻读的问题。我们还是以user举例,假设现在user表有几条记录

    id Age
    1 10
    2 20
    3 30

    当我们执行:
    `begin;
    select * from user where age=20 for update;

    begin;
    insert into user(age) values(10); #成功
    insert into user(age) values(11); #失败
    insert into user(age) values(20); #失败
    insert into user(age) values(21); #失败
    insert into user(age) values(30); #失败
    <br />只有10可以插入成功,那么因为表的间隙mysql自动帮我们生成了区间(左开右闭)<br />(negative infinity,10],(10,20],(20,30],(30,positive infinity)
    `
    由于20存在记录,所以(10,20],(20,30]区间都被锁定了无法插入、删除。
    如果查询21呢?就会根据21定位到(20,30)的区间(都是开区间)。
    需要注意的是唯一索引是不会有间隙索引的。