MySQl
mysql 自增主键出现不连续的原因?
有人可以回答一下嘛
如果是默认情况下,设置主键自增会有一个序列,从1开始,步长为1。
在没有更改这个配置的情况出现了自增不连续的情况有可能是数据被删除导致的,比如已经插入了5条数据,此时id为1-5,此时删除第4条数据,再次插入数据时,自增依然按照序列中的值,插入6。
除此之外,当出现某些异常时,也可能导致序列中的值已经被使用,但是数据最后并未插入,也会出现某一个值看起来好像被跳过的情况。
有帮助请采纳,还有不懂的可以继续追问~
1 唯一主键冲突
2 事务回滚也会导致
你删除某一条然后添加也会出现 比如现有
1
2
3
你删除2
1
3
4
自增主键与记录数没有必然联系,比如:现在列表里有记录id1
,2
,3
,此时自增id已经到了4
,就算你把记录3
删了,下一次插入的记录也还是4
。自增id只管往上涨。
1 自增主键不能保证连续递增
2 MYSQL 5.7之前版本,自增值保存在内存里,没有持久化,重启后会拿当前max(id)+1作为最新主键;8版本,将自增值的变更记录在redo log中,重启的时候依靠redo log恢复重启之前的值
3自增值修改机制
3.1如果插入数据时id字段指定为0,null,或者未指定值,那么就把这个表当前auto_increment值添加到自增字段
3.2如果id字段指定了具体的值,就直接使用语句里指定值
3.3根据插入值和当前自增值大小关系,自增值变更结果也会有所不同,某次要插入值是X,当前自增值是Y
原因:
1唯一健冲突是导致自增主键id不连续的第一种原因
2事务回滚也会造成主键id不连续
3批量插入时,批量申请主键id,没有用完,导致主键id不连续
1.如果X<Y,那么这个表的自增值不变
2.如果X>=Y,就要把当前自增值修改为新自增值
重要的两个参数 自增初始值和步长,默认都是1
查看下是否有数据被删除了