#先创建表
CREATE TABLE `test1` (
`id` int(1) NOT NULL AUTO_INCREMENT,
`number` int(1) NOT NULL COMMENT '数字',
PRIMARY KEY (`id`),
KEY `number` (`number`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
#赋值初始值
insert into `test1` ( `id`,`number`) values ( 2,'2');
insert into `test1` ( `id`,`number`) values ( 4,'4');
insert into `test1` ( `id`,`number`) values ( 6,'6');
insert into `test1` ( `id`,`number`) values ( 9,'9');
表中number的隐藏间隙:
(-infinity, 2]
(2,4]
(4,6]
(6,9]
/* 事务1 */
BEGIN;
/* 查询 number =2 的数据并加记录锁 */
SELECT * FROM `test1` WHERE `number` = 2 FOR UPDATE;
#不要执行这个,先在新的控制台执行下面的事物语句
commit;
#--------------------------------------------------------------
/* 事务2*/
INSERT INTO `test1` (`number`) VALUES (0); # 被阻塞
/* 事务3 */
INSERT INTO `test1` (`number`) VALUES (1); # 被阻塞
/* 事务4 */
INSERT INTO `test1` (`number`) VALUES (2); # 被阻塞
/* 事务5 */
INSERT INTO `test1` (`number`) VALUES (3); # 被阻塞
/* 事务6 */
INSERT INTO `test1` (`number`) VALUES (4); # 正常执行
/* 事务7 */
INSERT INTO `