2011-07-12 101 views
1

我創建了一個表,並設置一個字段的自動遞增一些事情是這樣的:自動遞增的問題在MySQL

CREATE TABLE t1(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = MyISAM AUTO_INCREMENT = 123456; 

但對某些原因,我刪除了一些在表中的行。

現在的問題是,當我在表中插入新行時,應該爲新行分配已刪除的行的id,而不是分配新的id。

我不想重置所有ID的

我該怎麼做?

幫助讚賞:)

+0

,你可以重設自動遞增的數字,但你真的不應該需要。非線性ID應該沒有問題,應該在那裏嗎? – Nanne

+0

嘿對不起,我沒有提到以前我不想重置.. –

+0

等等。你有一個自動增量字段。它開始上限。你希望它繼續在更低的數字。但你不想重置它?介意你我的意思是重新設置。不會將其重置爲0本身。只需將其重置爲任何你想要的值即可。 – Nanne

回答

7

遺憾地說,但如果你想重新使用的ID,那麼你就必須編寫自己的觸發功能,做這被普遍認爲是不使用的AUTO_INCREMENT.不好的做法。

想象一下,你的身份證號爲50,000,並刪除了ID爲1的條目......你真的想要添加的下一條記錄重新使用ID 1嗎?

2

您將不得不手動執行此操作,而不是依靠MySQL爲您執行此操作。 AUTO-INCREMENT標誌保持一個整數,該整數在每個插入語句時遞增,並被分配爲後續插入的PK。除非你想寫一個更新觸發器,將這個值重置爲最低未使用的整數,否則我會建議使用服務器端腳本語言來處理它。

不管怎樣,爲什麼使用自動增量值的問題呢?

3

AUTO_INCREMENT的整點是自動增量...

您可以明確地分配,雖然這些ID和MySQL將允許它。

0

要重置自動增量值,你可以使用

ALTER TABLE t1 AUTO_INCREMENT=1 

下一個插入的記錄將使用ID 1

+0

實際上,下一個ID將是(表中最大ID)+1。 –

+0

否。設置AUTO_INCREMENT的目的是更改下一個生成的值。 –

+0

你說的目的當然是對的。但我的意見是關於實際會發生什麼。您編寫的語句「ALTER TABLE t1 AUTO_INCREMENT = 1」將僅將auto_increment計數器重置爲1,並且僅當表格爲空時。如果表中有任何記錄(這是原始問題中的情況),則在執行語句之後,如果計數器是MyISAM,則計數器將設置爲{[表中存在的最大ID] + 1}。對於InnoDB,auto_increment的值不會被改變。請參閱官方文檔:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html –