MySQL自增约束,修改自增量的一个非常扯淡的规则:自增字段所取的值必须满足-1后能整除自增量

auto_increment为MySQL的自增约束,AUTO_INCREMENT为自增初始值,具体规则从以下示例中体现。

第一步,建表。

create table table_name(id int primary key auto_increment,name varchar(10));
#该语句建表

show create table查询得AUTO_INCREMENT=1

第二步,第一次添加数据。

insert into table_name (name) values ('妙蛙种子'),('妙蛙草'),('妙蛙花');
#第一次添加数据

show create table查询得AUTO_INCREMENT=4(=3+1)

第三步,修改自增量并第二次添加数据。

set auto_increment_increment =3;
insert into table_name (name) values ('小火龙'),('火恐龙'),('喷火龙');

show create table查询得AUTO_INCREMENT=13(=10+3)

第四步,修改自增量并第三次添加数据。

set auto_increment_increment =5;
insert into table_name (name) values ('杰尼龟'),('卡咪龟'),('水箭龟');

show create table查询得AUTO_INCREMENT=31(=26+5)

可以发现出现问题,id=16既不是上一次的AUTO_INCREMENT=13,也不是10+5

第五步,修改自增量并第四次添加数据。

set auto_increment_increment =10;
insert into table_name (name) values ('绿毛虫'),('铁甲蛹'),('巴大蝴');

show create table查询得AUTO_INCREMENT=61(=51+10)

其中id=31又重新等于上一次的AUTO_INCREMENT=31,但此时自增量已经更改为10,也就是问题依旧存在,只是看上去能解释了

第六步,修改自增量并第五次添加数据。

set auto_increment_increment =7;
insert into table_name (name) values ('独角虫'),('铁壳蛹'),('大针蜂');

show create table查询得AUTO_INCREMENT=85(=78+7)

可以发现又出现问题,id=64既不是上一次的AUTO_INCREMENT=61,也不是51+7

第七步,修改自增量=9并修改AUTO_INCREMENT=79(AUTO_INCREMENT设置规则是不能低于数据),第六次添加数据

set auto_increment_increment =9;
alter table table_name auto_increment=79;
insert into table_name (name) values ('波波'),('比比鸟'),('比雕');
#测试过,上述的第一、第二条语句调换位置无影响

问题依旧存在,id=82既不是设置的AUTO_INCREMENT=79,也不是78+9

第八步,仅修改AUTO_INCREMENT=101或150(自增量依旧为9),第七、八次添加数据

alter table table_name auto_increment=110;
insert into table_name (name) values ('小拉达'),('拉达');

alter table table_name auto_increment=200;
insert into table_name (name) values ('烈雀'),('大嘴雀');

可以发现,在不修改自增量的前提下,改大AUTO_INCREMENT会影响结果,但改小不会。而第七步改小AUTO_INCREMENT应该对结果无关,可以推测是修改自增量对结果产生了影响。

最后经过多次实验终于弄清楚了原因,修改自增量有一个非常扯淡的规则:

自增字段所取的值必须>= AUTO_INCREMENT,且满足(字段值-1)能整除自增量。

如自增量=3,AUTO_INCREMENT=4,取值(4,7,10)

如自增量=5,AUTO_INCREMENT=13,取值(16,21,26)

如自增量=10,AUTO_INCREMENT=31,取值(31,41,51)

丢~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值