MySQL设置自增初始值和步长

我这里使用的为Navicat:

(一般设置特殊的自增值和自增步长是为了:当数据出现错乱时,我们需要将备份的数据和线上的数据进行比对时使用。)

我们可以通过:SHOW VARIABLES LIKE 'auto_inc%'; 查看当前数据库的自增长设置。


auto_increment_increment这是自增长的步长。

auto_increment_offset这是自增长开始的值。

假如有一张test表,我们要给它增加一个自增列(id列)。

为表增加自增列的方法:

alter table `test`add id BIGINT; -- 为test表增加一个名称为id,类型为bigint的列.

alter table `test` change id id BIGINT not null auto_increment primary key; -- 将id列设置为主键并且自增.

那么如果使用默认值的时候,id列的值就是:1,2,3,4,5......


现在想要更改test表的id增长开始值和增长的步长,可以使用如下方法:

SET @@auto_increment_increment=3; -- 将自增长步长设置为3

SET @@auto_increment_offset=4; -- 将自增长开始值设置为4

我们先看下设置的自增步长和初始值是否改变了:再次执行SHOW VARIABLES LIKE 'auto_inc%'; 


通过查询结果,我们可以看到,自增步长和初始值已经被改变,那么接下来我们看一下id值会不会按照我们的期望进行设置。

设置之前,需要删除test表已有的id列,然后重新进行设置:

第一步:删除test表的id列;

alter table `test` drop column id; 

第二步:重新生成主键id,并设置成自增;

alter table `test`add id BIGINT;

alter table `test` change id id BIGINT not null auto_increment primary key;

查看一下结果,看是不是我们期望的值:


通过结果可以看到:从第二行开始,确实符合我们的设置。

但是:id是从3开始的,这与我们的设置并不一样,我们设置的为从4开始,怎么回事?怎么解决?

先提供一种比较low的方案解决这个问题:这里我还没找到更好的解决方案,后续有好的方案会更新。

比较low的方案:我们在这里增加一行值,将id设置为1,然后再执行删除id列,生成id列并设置自增,这样生成数据后,我们只需要删除第一行我们增加的列就可以达到目的了。


通用解决方案:待更新。

查找了一下博客,并没有找到更好的解决办法,但是找到了产生这种情况的原因,大家可以看一下:

MySQL设置自增初始值不匹配的问题(https://blog.csdn.net/whereismatrix/article/details/54667502)




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值