我有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
任何解決方案?
感謝
我有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
任何解決方案?
感謝
一個表的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 - 您是否真的會在不久的將來達到這個值?
你可以做這些步驟
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將幫助您還
感謝您的幫助,這種方法非常好。 :) – arsen99 2013-04-10 18:42:33
歡迎你!不錯,它幫助你:),確保接受幫助他人的答案。 – 2013-04-10 19:04:55
爲什麼你會需要這個? – 2013-04-10 18:07:14
因爲我有非常大的差距,比如12345,下一個數字是123456,並且在不久的將來我會接近bigint值。 – arsen99 2013-04-10 18:18:09