mysql插入意向锁测试
1、表结构
CREATE TABLE `reno` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8
2、表数据
insert into reno select 5, 'aa';
insert into reno select 7, 'bb';
insert into reno select 9, 'cc';
insert into reno select 18, 'dd';
insert into reno select 23, 'ee';
insert into reno select 30, 'ff';
insert into reno select 40, 'gg';
insert into reno select 45, 'hh';
insert into reno select 99, 'ii';
3、两种尝试
下面两种方案都会造成阻塞,我理解都是事务1获取到了间隙锁,事务2获取插入意向锁阻塞,但是“show engine INNODB status\G;”输出结果不一样,
第一种方案
事务1 lock_mode X locks gap before rec 我理解是间隙锁
事务2 lock_mode X locks gap before rec insert intention waiting 我理解是获取插入意向锁
第二种方案
事务1 trx id 9821 lock_mode X 我理解是 Next key锁
事务2 lock_mode X insert intention waiting 我理解是获取插入意向锁
我的疑问 为什么两个方案,事务1获取的锁,以及事务2获取的锁都是不一样的呢
第一种方案