我有一个带有自动递增主键的表。因为我允许删除我的数据,所以主键中存在许多空白。例如,如果我有行1,2和3,并且2被删除,我只剩下第1行和第3行(意味着数字2是空的和空的)。
现在,我试图进行完整的数据迁移,这已经证明给我带来了麻烦。所以我想知道是否可以简单地重新索引所有内容 - 即运行某种MySQL UPDATE查询,以便将所有行的主键更新为平滑的运行顺序。
我该怎么做?
答案 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;