ENGINE=InnoDB;
insert into t values(0,0,0),(5,5,5),
(10,10,10),(15,15,15),(20,20,20),(25,25,25);
MySQL...的加锁规则是?...mode;
update t set d = d + 1 where id = 5;
insert into t values(8,8,8);
Session A会在c=5这一行上加上读锁...A的查询使用覆盖索引,并不需要访问主键索引,因此主键索引上没有加任何锁
Session A加的锁为c=5的读锁和(5,10)的间隙锁,因此Session B可以执行成功,但是Session C因为间隙锁会被阻塞...注意我们这里加的是读锁,如果你使用的是for update,MySQL会认为你要更新数据,因此会给主键索引上满足条件的行加上行锁。