2014-11-16 61 views
2

我有一個主鍵的數據庫,每當我添加一行時,即使刪除了行之前也記得主鍵,繼承人一些圖像可以更好地解釋我想修復的內容,如果可能:
1. http://i.imgur.com/RVjbXur.png
2. http://i.imgur.com/6VgG2G3.png
你看到下面的香港專業教育學院刪除包含TEST(表中的唯一行),然後加入2個換新行。在新的繼續,即使該行不再有主鍵,有沒有什麼辦法讓它忘記它或重置所以每當數據庫運行的獲得1-2-3等SQL主鍵重置?

+0

1.你用Google搜索添加到您的INSERT聲明這部分? 2.你在使用什麼樣的數據庫?的 – Gelunox

+0

可能重複[如何重置AUTO \ _INCREMENT在MySQL?(http://stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql) –

回答

2

這不會有什麼用Primary Key。你所指的是auto increment。一個主鍵不一定是整數,甚至不是一個自動值(自動增量) - 雖然不像其他數據類型那樣常見,但是可以作爲主鍵使用。

自動遞增的設計來增加和它不會使用可能被刪除以前的鍵。

它通常不是重置是一個好主意,但是你可以通過刪除和重建表或使用

ALTER TABLE tablename AUTO_INCREMENT = 1 

如果你想保持無孔一個單獨的列,你可以通過使用一個做到這一點trigger

+1

+1,因爲它不是一個好想法 – DarkBee

+1

我不得不讓它成爲那麼!謝謝。 – Batzz

0

組織的ID您將需要dropcreate該表將主鍵重置爲1或0,具體取決於DBMS。

0

如果是MyISAM表,你可以用這個ALTER TABLE table_name AUTO_INCREMENT = 1;復位primary_key。如果表中包含一些行,它將爲該primary_key設置下一個數字(在該表中的最後一個id之後)。

您可以在最後ON DUPLICATE KEY UPDATE ID=LAST_INSERT_ID(ID)

+0

我無法看到'ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID)'對這個​​問題有幫助。這將只返回最後一個自動遞增ID或現有自動遞增ID,如果更新已經存在則觸發。你會如何建議OP使用它來填充刪除行的空洞? – Steve

+0

他沒有指定他是否添加了它們,並且它們是重複的,所以這個代碼是primary_key重置的補充。如果出現重複行,這將幫助他保持primary_key。這段代碼不會返回任何東西,只是保持primary_key而不會在失敗的插入後增加。 – LukasS