在MySQL中

时间:2015-08-04 13:45:16

标签: mysql indexing

我有一个带有自动递增主键的表。因为我允许删除我的数据,所以主键中存在许多空白。例如,如果我有行1,2和3,并且2被删除,我只剩下第1行和第3行(意味着数字2是空的和空的)。

现在,我试图进行完整的数据迁移,这已经证明给我带来了麻烦。所以我想知道是否可以简单地重新索引所有内容 - 即运行某种MySQL UPDATE查询,以便将所有行的主键更新为平滑的运行顺序。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是创建表的空克隆并复制原始行的所有行。这样,所有AUTO_INCREMENT字段都会重新分配。

1)复制表格:

CREATE TABLE clone_table LIKE original_table;

2)复制所有行,使用AUTO_INCREMENT语法手动指定除id之外的所有字段(INSERT INTO ... SELECT ...?):

INSERT INTO clone_table (field1, field2, fieldN) 
SELECT field1, field2, fieldN FROM original_table ORDER BY id;

3)或者,您现在可以删除旧表并重命名克隆:

DROP TABLE original_table;
RENAME TABLE clone_table TO original_table;