2011-01-05 78 views
3

我有自动增量主键的MySQL数据库中的表。定期将这个表中的行删除并添加。所以结果是最新一行的PK值增长得非常快,但这个表中没有太多的行。如何重新计算主索引?

我想要做的是以这种方式“重新计算”PK,即第一行有PK = 1,第二个PK = 2等等。此表没有外部依赖关系,所以它会是“安全的”。

是否有反正它只能使用mysql查询/工具?或者我必须从我的代码中完成它?

+2

当没有“上PK外部依赖”,为什么你需要一个指数? – Simon 2011-01-05 08:46:44

回答

10
set @pk:=0; 

update 
    your_table 
    set [email protected]:[email protected]+1 
    order by pk;  <-- order by original pk 

在我看来,有一个大的代理键是好的。你可能不太可能用完所有允许的最大整数。考虑一下,你可以使用unsigned来将它加倍。

0

不要忘了重新计算后更改表中的AUTO_INCREMENT值:

mysql> SELECT @pk; 
+------+ 
| @pk | 
+------+ 
| 9911 | 
+------+ 
1 row in set (0.00 sec) 


ALTER TABLE your_table AUTO_INCREMENT = 9912;