作用1:解决主从不一致问题
在mysql实战45讲中提到了这个问题,如果没有间隙锁,在mysql的binlog格式为statement时,假设
事务1:删除where age=18的数据,对应删除的记录主键id=1,2,3
事务2:插入age=18的数据,对应id=4,
事务2先提交,事务1后提交,此时主库有id=4,age=18的数据,但是从库拿到的binlog是先插入age=18 的数据,然后在执行delete where age=18的数据,也就会吧id=4,age=18 的数据一起删除掉,导致主从数据不一致。
进一步引出:在读已提交的模式下设置binlog为row格式解决主从不一致的问题
作用2:唯一索引唯一性校验
在并发的情况下,唯一索引插入不存在的数据,唯一性的控制也要通过间隙锁来控制,因为这个时候行锁并不存在