select属于快照读操作,不会出现幻读,只有update、delete这种当前读操作才会出现幻读现象。
幻读的话,我给你举个例子,假如A事务正在查询id<10的所有数据,只存在id为1~7的数据,8、9并不存在,此时B事务向数据库插入id为8的数据,那么事务A就会出现幻读现象,本来是不存在id为8的数据的,但是像出现幻觉一样读取到了,这就是幻读。
解决的办法是加上next-key锁(也就是行锁+gap锁),gap锁会锁着id为8、9的两个位置,阻止事务A读取数据的时候,事务B向数据库插入数据,这样就避免幻读了