2013-04-10 16 views
0

我有InnoDB表看起來像這樣:如何重置從汽車incremment ID在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

任何解決方案?

感謝

+0

爲什麼你會需要這個? – 2013-04-10 18:07:14

+0

因爲我有非常大的差距,比如12345,下一個數字是123456,並且在不久的將來我會接近bigint值。 – arsen99 2013-04-10 18:18:09

回答

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 - 您是否真的會在不久的將來達到這個值?

1

你可以做這些步驟

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。

那麼它將再次下令所有的IDS

this將幫助您還

+0

感謝您的幫助,這種方法非常好。 :) – arsen99 2013-04-10 18:42:33

+0

歡迎你!不錯,它幫助你:),確保接受幫助他人的答案。 – 2013-04-10 19:04:55