2016-09-21 64 views
1

當我將數據插入到一個全新的表中時,它將通過AUTO_INCREMENT分配一個新的ID。因此,我第一次執行插入操作時,我得到的ID爲1.但是,如果刪除該行並插入新數據,則該表的行爲就好像仍然存在前一行(新行的ID爲2)。這種行爲關係到我,因爲我覺得數據仍然存在於某個地方。任何想法可能是什麼?爲什麼我的sql表維護被刪除的ID?

+0

你並不孤單,感覺數據持續存在。當我開始使用數據庫時,我也有同樣的感受。一旦你處理了auto_increment字段,你就會習慣於通過id從tablename order中選擇id,name ...。如果您注意到ID 1,3,4 ...,您可以斷定id 2已被刪除。在某些情況下,您必須存檔已刪除的數據,這樣可以更容易地查看刪除的內容。 – zedfoxus

回答

2

您的數據不會持續存在。 MySql維護一個關於您的表的獨立表,其中包含您的表的下一個自動增量值。

ALTER TABLE tablename AUTO_INCREMENT = 1 

但是,要知道,如果你重新設置下表中的另一個有效的值,你是在自找麻煩:您可以重設此。

+0

如何訪問該信息?每次我清空表格時,我都想從id = 1開始(我正在清空表格的唯一原因是用於實驗和學習目的)。 – tocoolforscool

+0

@ j3ssi3ftw - 請參閱[本主題](http://stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql)瞭解更多信息。但只要使用'ALTER TABLE'語句就像我在每次清空表格時所建議的那樣。 –

+0

您可以執行'truncate table tablename;'然後'ALTER TABLE tablename AUTO_INCREMENT = 1;'將自動增量重置爲1 – zedfoxus

2

你應該簡單地使用。

truncate table tablename; 
+0

僅供OP考慮:截斷表會將auto_increment字段重置爲其起始值:http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html – zedfoxus

+0

「truncate table」的一個問題如果其他表中的任何外鍵引用表,它將不會在InnoDB或NDB表上工作。它也不會調用任何'ON DELETE'觸發器。否則,它就像刪除所有行並顯式更改表的'AUTO_INCREMENT'值一樣好(並且更快)。 –

+1

我剛剛查了一個truncate的例子,它非常有用,但是要感謝例外。 – tocoolforscool

相關問題