2010-04-13 57 views
1

我們如何從任何MySQL-DB表中重新使用已刪除的ID?我們如何從任何MySQL-DB表中重新使用已刪除的ID?

如果我想回滾已刪除的ID,我們可以做到嗎?

+2

爲什麼要重複使用IDS? – 2010-04-13 12:17:54

+0

這樣我就可以重新插入舊數據而不影響任何其他進程 – 2010-04-13 12:18:49

+0

只需回滾一個交易然後 – 2010-04-13 12:20:55

回答

4

通過查找最低未使用的ID並強制它可能是可能的,但這是非常糟糕的做法,主要是因爲參照完整性:例如,它可能是來自其他表的關係指向已刪除的記錄,如果ID被重新使用,不會被識別爲「已刪除」。

底線:不要這樣做。這是一個非常糟糕的主意。

相關閱讀:Using auto_increment in the mySQL manual

回覆您的更新:即使你有一個正當的理由這樣做,我不認爲有一個自動的方式來重新使用在auto_increment字段值。如果有的話,你必須找到最低的未使用的值(可能使用存儲過程或外部腳本),並強制將其作爲ID(如果甚至可能的話)。

+0

@Pekka我有類似的場景如果我通過刪除前一個測試我的數據,但它沒有爲我工作,但現在我不得不重用舊數據具有相同的舊ID然後呢? – 2010-04-13 12:21:41

+0

@Parth我不明白你的情況,但是如果你不得不重新使用舊的ID,你很可能會在某處出現設計缺陷。你能否詳細說明你的問題? – 2010-04-13 12:22:38

+0

@Pekka,我跟蹤INsert更新和刪除表中的查詢,我做插入和更新,因爲我不會面對任何問題與ID有任何問題,但一旦執行刪除操作,我失去了唯一的ID可能是在很多地方使用,並重新插入舊數據將使新的ID不同於舊的ID,因此,對於這種情況下,我需要舊ID,以便我可以在其他數據庫中複製具有相同舊ID的查詢 – 2010-04-13 12:27:34

3

你不應該這樣做。
不要認爲它是一個數字。
這不是一個數字。它是唯一的標識符。想想這個詞 - 獨特。沒有記錄應該用相同的ID來標識。

+0

@Col。你可以將我命名爲「THE DATA TRACKER」:) – 2010-04-13 12:29:00

+0

@Col。你明白了嗎? – 2010-04-13 12:37:16

+0

同意。這不像是一個零散的驅動器,如果它們分散開來,效率就會降低。只要你的id的數據類型可以處理這些值,不用擔心。如果無法處理這些值,請獲取新的數據類型。 – CaseySoftware 2010-04-13 12:48:49

1

1.

按規定你的解釋「@Pekka,我跟蹤INSERT,UPDATE和DELETE查詢......」我以爲你只是一些想怎麼把你的舊數據恢復到相同的ID。

在這種情況下,您可以考慮在您的表中使用刪除標誌列。

如果爲某行設置了刪除標誌,則應考慮程序將其刪除。此外,您可以通過設置刪除平面(false)來使其可用。

類似的方法是將整行移動到某個臨時表,並且可以在需要時使用相同的數據和ID將其返回。

上一頁。想法雖然更好。

2.

如果這不是你的意思,你的解釋;並且您想要刪除並仍然使用ID(自動生成)的所有值;我有幾個想法可以實現: - 創建一個用於存儲已刪除ID的表(IDSTORE)。 - 創建一個在行刪除時激活的觸發器,它將記錄ID並將其存儲到表中。 - 插入時從IDSTORE獲取最小ID並插入該值。如果IDSTORE爲空,則可以傳遞NULL ID以生成自動增量編號。

當然,如果您已經實現了引用/關係(FK),則必須手動處理它,因爲您的要求如此。

進一步閱讀: http://www.databasejournal.com/features/mysql/article.php/10897_2201621_3/Deleting-Duplicate-Rows-in-a-MySQL-Database.htm

相關問題