如何使用PHP为MySQL表中的每一行重新分配AUTO_INCREMENT列

Dre*_*rew 11 php mysql auto-increment

我有一个图片库,网站成员可以上传图像.上传图像时,会写入一个MySQL行,其中包含有关图像,成员等的各种信息.此行使用AUTO_INCREMENT创建其ID,以便getimage.php?id=XX可以获取要显示的图像.

我使用for循环遍历ID以显示库中的图像.

如果我删除第5行/图像,例如,AUTO_INCREMENT从去12345678912346789.

我想从头开始重新为MySQL表中的每一行分配ID.所以12346789变为12345678.我将如何实现这一目标?

Dre*_*rew 18

我发现这个工作完美且非常快,所以这里是:

ALTER TABLE tablename DROP id

ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1
Run Code Online (Sandbox Code Playgroud)

我知道这不是正确的方法,但对于我的具体情况,这正是所需要的.我正在使用的表中没有任何内容可以从另一个表中引用.

  • 真棒,简单明了的解决方案!介意解释为什么以及如何运作?“ FIRST”有什么作用?哦,我建议将“ INT”更改为“ INT UNSIGNED”。 (2认同)

Joh*_*ica 12

如果你想让自动递增的id 永远是连续的,那就放手吧,这是一场无用的斗争.

如果您只想重新编号一次,那很简单:

创建具有相同布局的新表:

CREATE TABLE mytable2 LIKE oldtable;
Run Code Online (Sandbox Code Playgroud)

将所有行复制到新表,记住不要选择auto_incrementing id,否则将保留旧编号.

INSERT INTO mytable2 (field2, field3, field4)
  SELECT field2, field3, field4 FROM oldtable ORDER BY oldtable.id;

RENAME oldtable archive;

RENAME mytable2 oldtable;

DROP archive;
Run Code Online (Sandbox Code Playgroud)

你现在有连续的编号.