昨天在调试一个业务代码中,无意间发现了一个问题。数据入库后的主键不是连续自增的,主键键值没过几秒就从两千多直接跳到了五千上下。这是为什么?瞬间引起我的注意。
先简单说明下环境。Mysql版本:5.6.23。为了防止某些数据重复,数据库中对某些字段设置了唯一索引,即unique key。经确认此表也只有一个业务程序在操作。那么,问题就定位到主键的auto_increment属性上了。
题重现
下面来还原问题,以便能准确查找出原因。
表结构如下:
CREATETABLE`test_innodb`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'自增ID',`username`varchar(100)NOTNULLCOMMENT'用户名', PRIMARYKEY(`id`),UNIQUEKEY`UNIQUE_USERNAME`(`username`) )ENGINE=InnoDBDEFAULTCHARSET=utf8
username字段设置了唯一索引(unique key)。先插入一条数据:
INSERTINTOtest_innodb (`username`)VALUES('admin');
执行成功,主键ID为“1”。再次执行此SQL,因username重复,数据入库失败,提示:
Duplicate entry'admin'forkey'UNIQUE_USERNAME'
说明insert的时候 数据库是先自增主键 然后再插入数据
转https://www.marser.cn/tag/mysql.html
网友评论