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)
丢~