我有一个图片库,网站成员可以将图片上传到。上传图像时,会写入一行MySQL行,其中包含有关图像,成员等的各种信息。此行使用AUTO_INCREMENT创建其ID,以便getimage.php?id=XX
可以获取要显示的图像。 / p>
我使用for循环遍历ID以显示图库中的图像。
例如,如果我删除第5行/图像,则AUTO_INCREMENT从123456789
变为12346789
。
我想从头开始重新为MySQL表中的每一行分配ID。所以12346789变成12345678.我将如何实现这一目标?
答案 0 :(得分:17)
我发现这个工作完美且非常快,所以这就是:
ALTER TABLE tablename DROP id
ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1
我知道这不是正确的方法,但对于我的具体情况,这正是所需要的。我正在使用的表中没有任何内容可以从另一个表中引用。
答案 1 :(得分:12)
如果您希望自动递增ID 始终是连续的,那就放手吧,这是一场无用的斗争。
如果您只想重新编号一次,那很简单:
创建一个具有相同布局的新表:
CREATE TABLE mytable2 LIKE oldtable;
将所有行复制到新表格,请记住不选择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;
您现在有连续的编号。
答案 2 :(得分:1)
正如其他已经说过的,这是错误的方法,但是如果你需要重新编号(例如它对排序列有效),这里是查询:
UPDATE tabaleName SET fieldName = fieldName - 1 WHERE fieldName > 5 ORDER BY fieldName ASC
由于你使用的是自动增量,你必须重置它
ALTER TABLE tableName AUTO_INCREMENT=10000
但请注意,我发布这个仅用于教育目的。这是错误的方法!单击next / prev时,不要在查询中提供确切的ID,而是
SELECT * FROM tableName WHERE fieldName > _the_previous_id_
ORDER BY fieldName ASC LIMIT 1
甚至更好,选择相册中的所有记录,然后循环播放。
答案 3 :(得分:1)
SET @id = 0;
UPDATE table SET id = @id := @id + 1 ORDER BY id;
SET @alt = CONCAT('ALTER TABLE table AUTO_INCREMENT = ', @id + 1);
PREPARE aifix FROM @alt;
EXECUTE aifix;
DEALLOCATE PREPARE aifix;
使用示例