簡體   English   中英

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

[英]How can we re-use the deleted id from any MySQL-DB table?

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

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

通過查找最低的未使用 ID 並強制使用它可能是可能的,但這是非常糟糕的做法,主要是因為參照完整性:例如,可能是其他表的關系指向已刪除的記錄,這將無法識別為如果重復使用 ID,則不再“刪除”。

底線:不要這樣做。 這真是個壞主意。

相關閱讀: 在 mySQL 手冊中使用 auto_increment

重新更新:即使您有正當理由這樣做,我也不認為有一種自動方法可以重用auto_increment字段中的auto_increment 如果有的話,您必須找到最低的未使用值(可能使用存儲過程或外部腳本)並強制將其作為 ID(如果可能的話)。

你不應該這樣做。
根本不要把它當作一個數字。
它不是一個數字。 它是唯一標識符。 想想這個詞——獨一無二 不應使用相同的 ID 標識任何記錄。

1.

根據您提供的解釋“@Pekka,我正在跟蹤插入更新和刪除查詢...”我假設您只是想將舊數據放回同一個 ID。

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

如果為某行設置了刪除標志,則應考慮程序將其視為已刪除。 此外,您可以通過設置 delete-flat(false) 使其可用。

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

上一頁想法更好。

2.

如果這不是你解釋的意思; 並且您想刪除並仍然使用 ID(自動生成)的所有值; 我有一些您可以實施的想法: - 創建一個表 (IDSTORE) 來存儲已刪除的 ID。 - 創建一個在行刪除時激活的觸發器,它將記錄 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

這是我的 mysql DB 案例:

我有菜單表,菜單 ID 在內容表中用作外鍵。 但是表之間沒有直接關系(糟糕的表設計,我知道但該項目是由其他開發人員完成的,后來我的客戶找我來處理它)。 所以,有一天我的客戶意識到有些內容沒有顯示出來。 我查看了問題,發現其中一個菜單從菜單表中刪除,但幸運的是菜單 id 存在於 cotent 表中。 我從已刪除的內容表中找到了菜單 id,並對具有相同菜單 id 和其他字段的菜單表運行正常插入查詢。 (Id 是主鍵)並且它起作用了。

insert into tbl_menu(id, col1, col2, ...) values(12, val1, val2, ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM