SELECT * FROM child WHERE id = 100;
如果id未编入索引或具有非唯一索引,则该语句会锁定前一个间隙。根据mysql文档。 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-gap-locks
为什么这里需要间隙锁定。对id = 100的索引进行记录锁定将锁定对表id = 100的所有插入,更新和删除。
因此,即使存在多个id = 100的行,也不会读取幻像。为什么在这种情况下缺口锁?