加锁的基本单位是 next-key lock,但是有些情况会退化为记录锁或者间隙锁,怎么退化其实就是看怎么能避免幻读现象的发生
唯一索引等值查询
有结果:将next-key lock 退化为记录锁
没有结果:将 next-key lock 退化为间隙锁
唯一索引范围查询
大于:查到和查不到都是 next-key lock
大于等于:对于等值查询,如果能找到,就将那一条记录的锁退化为记录锁,找不到就是 next-key lock,其他都是next-key lock
小于:
没有结果:将扫描到的最后一个记录的锁退化为间隙锁,其他都是 next-key lock
有结果:将扫描到的最后一个记录的锁退化为间隙锁,其他都是 next-key lock
小于等于:
没有结果:将扫描到的最后一个记录的锁退化为间隙锁,其他都是 next-key lock
有结果:
看条件值,也就是等值条件有没有记录,如果没有,将这条记录的锁退化为间隙锁,其他都是 next-key lock
如果有,全部都是 next-key lock
非唯一索引等值查询
没有结果:将扫描到第一条不符合条件的记录的二级索引的next-key lock 退化为间隙锁,主索引树不加锁
有结果:在二级索引树符合条件的记录的锁都是 next-key lock,第一条不符合记录的锁退化为间隙锁,同时将主索引树上符合条件的记录退化为记录锁
非唯一索引范围查询
不管有没有结果,二级索引加的锁都是 next-key lock