Mysql 如果修改主键';s类型,自动增量是否保持不变?

Mysql 如果修改主键';s类型,自动增量是否保持不变?,mysql,Mysql,假设我创建了一个表,如下所示: create table my_rows( id int primary key auto_increment; /*...*/ ) 我想获得一些未使用的空间,并想将其转换为smallint,然后,我考虑像这样修改它 alter table my_rows modify column id unsigned int primary key auto_increment; 假设有一些ID,达到某个级别,比如说257。在这样的更改之后,下一行的id

假设我创建了一个表,如下所示:

create table my_rows(
    id int primary key auto_increment;
    /*...*/
)
我想获得一些未使用的空间,并想将其转换为
smallint
,然后,我考虑像这样修改它

alter table my_rows
modify column id unsigned int primary key auto_increment;

假设有一些ID,达到某个级别,比如说257。在这样的更改之后,下一行的id值将恰好为258,即自动递增计数器将保持不变,这是真的吗?如果没有,我应该如何补救?

没有问题,您可以在此处使用它:

查看如何手动设置
id
插入行,或者让
自动增量
发挥神奇作用

create table my_rows(
    id int NOT NULL primary key auto_increment,
    name varchar(50)
);

insert into my_rows(name) values ('One'), ('Two');
insert into my_rows(id, name) values (3, 'Three');

ALTER TABLE my_rows MODIFY id smallint NOT NULL auto_increment;

insert into my_rows(name) values ('Four');
insert into my_rows(id, name) values (5, 'Five');


select * from my_rows;
SHOW COLUMNS FROM my_rows;

/* output looks like: */
id  name
1   One
2   Two
3   Three
4   Four
5   Five
注意:自动增量不会填充“空白”点。因此,如果您手动设置
id
s,并在其间留下一些空白点,然后继续执行
auto_increment
操作,“空白点”将不会被填充。因此这里将缺少
6
7

create table my_rows(
    id int NOT NULL primary key auto_increment,
    name varchar(50)
);

insert into my_rows(name) values ('One'), ('Two');
insert into my_rows(id, name) values (3, 'Three');

ALTER TABLE my_rows MODIFY id smallint NOT NULL auto_increment;

insert into my_rows(name) values ('Four');
insert into my_rows(id, name) values (5, 'Five');

insert into my_rows(id, name) values (8, 'Eight');
insert into my_rows(name) values ('Nine');

无问题运行您可以在此处使用它:

查看如何手动设置
id
插入行,或者让
自动增量
发挥神奇作用

create table my_rows(
    id int NOT NULL primary key auto_increment,
    name varchar(50)
);

insert into my_rows(name) values ('One'), ('Two');
insert into my_rows(id, name) values (3, 'Three');

ALTER TABLE my_rows MODIFY id smallint NOT NULL auto_increment;

insert into my_rows(name) values ('Four');
insert into my_rows(id, name) values (5, 'Five');


select * from my_rows;
SHOW COLUMNS FROM my_rows;

/* output looks like: */
id  name
1   One
2   Two
3   Three
4   Four
5   Five
注意:自动增量不会填充“空白”点。因此,如果您手动设置
id
s,并在其间留下一些空白点,然后继续执行
auto_increment
操作,“空白点”将不会被填充。因此这里将缺少
6
7

create table my_rows(
    id int NOT NULL primary key auto_increment,
    name varchar(50)
);

insert into my_rows(name) values ('One'), ('Two');
insert into my_rows(id, name) values (3, 'Three');

ALTER TABLE my_rows MODIFY id smallint NOT NULL auto_increment;

insert into my_rows(name) values ('Four');
insert into my_rows(id, name) values (5, 'Five');

insert into my_rows(id, name) values (8, 'Eight');
insert into my_rows(name) values ('Nine');

您是否想过在单独的计算机上编写此测试table@RiggsFolly我的计划是完成一些事情,然后,如果没有可行的答案,我会做一些实验,自己回答我的问题。我相信这样一个问题肯定会被曝光,它不是一个给我密码的问题,我在互联网上也没有找到任何有用的东西。所以,我的想法是创造一个问题,这是抓住,如果没有人抓住它,我会这样做。你想过写一个单独的测试吗table@RiggsFolly我的计划是完成一些事情,然后,如果没有可行的答案,我会做一些实验,自己回答我的问题。我相信这样一个问题肯定会被曝光,它不是一个给我密码的问题,我在互联网上也没有找到任何有用的东西。所以,我的想法是创造一个问题,这是抓住,如果没有人抓住它,我会这样做。很好的答案。我想知道我们是否只能通过测试并希望没有边缘情况才能知道这一点,或者这是自动增量的已知特性。(我指的是在改变后保持其位置的功能)回答得不错。我想知道我们是否只能通过测试并希望没有边缘情况才能知道这一点,或者这是自动增量的已知特性。(我指的是改变后保持其位置的功能)