间隙锁:
当我们用范围条件,而不是使用相等条件检索数据,并请求共享或排他锁时, InnoDB 会给符合条件的已有数据进行加锁;对于键值在条件范围内但并不存在的记录,叫做"间隙( GAP )", InnoDB 也会对这个"间隙”加锁,这种锁机制就是所谓的间隙锁( Next - Key 锁)。
举个例子:
如果更新条件是id<10,使用update语句来更新符合条件的数据的某个字段值,那么id=5,7,8的行数据也会被锁,即间隙行被锁(虽然实际数据不存在)
导致的结果:
另外的事务插入不存在但是处以id<10条件的行数据时,会进入阻塞状态,直到事务1提交事务。
怎样避免间隙锁的危害:
我们写更新条件时尽量缩小where后面条件的范围,例如where id<10 and id>5,这样如果其他事务添加id>=10或id<=5的行数据时,则不会进入阻塞状态。