如何从InnoDB表中的自动增量重置ID

时间:2013-04-10 18:06:09

标签: mysql database

我有InnoDB表,如下所示:

ID | DATA
----------
1  |   A
2  |   B
5  |   C
8  |   D
13 |   E

我想将列ID重置为如下所示:

ID | DATA
----------
1  |   A
2  |   B
3  |   C
4  |   D
5  |   E

但不幸的是,这不起作用:

ALTER TABLE tableName AUTO_INCREMENT = 1

任何解决方案?

由于

2 个答案:

答案 0 :(得分:2)

你可以做那些步骤

ALTER TABLE `table` DROP `id`;
ALTER TABLE `table` AUTO_INCREMENT = 1;
ALTER TABLE `table` ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

1-将删除id列

2- set auto_increment从1开始

3-首先使用递增的值创建列ID。

然后它会再次命令你的所有ID

this也会帮助你

答案 1 :(得分:1)

表的AUTO_INCREMENT值确定MySQL将为下一个新记录提供的值 - 它对现有数据没有影响。

如果您想更改数据,则必须在自定义程序中自行完成。像(伪代码):

set counter = 1;    
while fetch new record and set X to current id {
    update table set ID = counter where id = X;
    counter = counter + 1;
}

无论其! - 如果您在任何其他表中使用该ID,则还必须更新其中的值。这可能会变得非常复杂 - 您应该尽量避免更改主键值。

最后,无符号BIGINT的最大值是18,446,744,073,709,551,615 - 你真的会在不久的将来达到这个值吗?