mysql innodb 行锁 insert

CREATE TABLE IF NOT EXISTS `t_enum` (
  `F_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `F_type` varchar(32) NOT NULL COMMENT '类型',
  `F_kid` varchar(64) NOT NULL COMMENT '数字键',
  `F_kstr` varchar(64) NOT NULL COMMENT '字母键',
  `F_value` varchar(128) NOT NULL COMMENT '值',
  `F_comment` varchar(128) NOT NULL COMMENT '备注',
  `F_enable` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:正常 -1:删除',
  `F_op_user` varchar(128) NOT NULL COMMENT '备注',
  `F_create_time` datetime NOT NULL COMMENT '创建时间',
  `F_modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`F_id`),
  UNIQUE KEY `uk_type_kid` (`F_type`,`F_kid`),
  UNIQUE KEY `uk_type_str` (`F_type`,`F_kstr`),
  KEY `idx_kid` (`F_kid`),
  KEY `idx_str` (`F_kstr`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='枚举常量表' AUTO_INCREMENT=13 ;

会话1

set autocommit=0

INSERT INTO `bfb_db_kuajing`.`t_enum` (`F_id`, `F_type`, `F_kid`, `F_kstr`, `F_value`, `F_comment`, `F_enable`, `F_op_user`, `F_create_time`, `F_modify_time`) VALUES (NULL, '7', '7', '', '', '', '0', '', '', CURRENT_TIMESTAMP);  

insert 一个语句 //当前会话木有commit或者rollback之前 其他会话是可以插入的,若当前会话回滚了,后续插入语句不会使用当前已经废弃的自增ID)


会话2

set autocommit=0

INSERT INTO `bfb_db_kuajing`.`t_enum` (`F_id`, `F_type`, `F_kid`, `F_kstr`, `F_value`, `F_comment`, `F_enable`, `F_op_user`, `F_create_time`, `F_modify_time`) VALUES (NULL, '7', '7', '', '', '', '0', '', '', CURRENT_TIMESTAMP);   (由于和会话1 的唯一索引 冲突 当前会一直阻塞直到会话1 结束


INSERT INTO `bfb_db_kuajing`.`t_enum` (`F_id`, `F_type`, `F_kid`, `F_kstr`, `F_value`, `F_comment`, `F_enable`, `F_op_user`, `F_create_time`, `F_modify_time`) VALUES (NULL, '8', '8, '', '', '', '0', '', '', CURRENT_TIMESTAMP);   如果是这这个插入语句 则会消耗新的自增ID F_ID



你可能感兴趣的:(数据库)