间隙锁是MySQL中用于确保范围查询期间一致性和并发安全性的关键技术。以下是通过六个案例帮助理解间隙锁的要点:唯一索引等值锁定:案例一:当对唯一索引进行等值查询并加锁时,此时会加记录锁,不会触发间隙锁。索引等值锁定退化为间隙锁:案例二:在非唯一索引上进行等值查询并加锁时,如果5不存在,则会退化为对这个间隙加锁,防止插入。唯一索引范围锁定:案例三:对唯一索引进行范围查询并加锁时,虽然涉及唯一索引,但由于是范围查询,会对[5,7]这个范围及其间的间隙加锁。非唯一索引范围锁定:案例四:在非唯一索引上进行范围查询并加锁时,会对间隙,事务B尝试锁定间隙,两者相互等待,导致死锁。LIMIT子句的影响:案例六:当使用LIMIT子句进行范围查询时,加锁范围可能会受到影响。例如,查询并锁定id大于5且小于等于10的前一条记录,实际加锁范围可能是(5,6]。总结: 间隙锁锁定的是索引中两个键值之间的空间,防止其他事务在这些区域内插入新的数据。 间隙锁主要在可重复读隔离级别下,等值或范围查询时产生。 理解间隙锁的加锁规则对于数据库性能优化至关重要,有助于减少数据冲突,提高并发性能。