1

我有看起来像这样的 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 表名 AUTO_INCREMENT=1

有什么解决办法吗?

谢谢

4

2 回答 2

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- 设置 auto_increment 从 1 开始

3-首先创建具有递增值的列 ID。

然后它会再次订购你所有的身份证

也会帮助你

于 2013-04-10T18:30:59.300 回答
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 - 你真的会在不久的将来达到这个值吗?

于 2013-04-10T18:23:28.843 回答