mysql插入意向锁测试

2019-03-26  本文已影响0人  pangzhaojie

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获取的锁都是不一样的呢 

第一种方案 

上一篇下一篇

猜你喜欢

热点阅读