2015
09-18
09-18
数据插入失败引发的主键auto_increment问题 HOT
昨天在调试一个业务代码中,无意间发现了一个问题。数据入库后的主键不是连续自增的,主键键值没过几秒就从两千多直接跳到了五千上下。这是为什么?瞬间引起我的注意。
先简单说明下环境。Mysql版本:5.6.23。为了防止某些数据重复,数据库中对某些字段设置了唯一索引,即unique key。经确认此表也只有一个业务程序在操作。那么,问题就定位到主键的auto_increment属性上了。
问题重现
下面来还原问题,以便能准确查找出原因。
表结构如下:
CREATE TABLE `test_innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`username` varchar(100) NOT NULL COMMENT '用户名',
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQUE_USERNAME` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
username字段设置了唯一索引(unique key)。先插入一条数据:
INSERT INTO test_innodb (`username`) VALUES('admin');
执行成功,主键ID为“1”。再次执行此SQL,因username重复,数据入库失败,提示:
Duplicate entry 'admin' for key 'UNIQUE_USERNAME'