我需要從表中刪除所有行,但在添加新行時,我希望自動增量的主鍵ID從0開始分別重新開始從1MySQL從表中刪除所有行並將ID重置爲零
回答
不要刪除,使用截斷:
Truncate table XXX
表處理程序不記得上次使用的AUTO_INCREMENT值,而是開始從一開始計數。即使對於MyISAM和InnoDB,這通常也不會重用序列值。
如果您無法使用(因爲外鍵約束,例如)TRUNCATE
您可以使用ALTER TABLE刪除所有行後,重新啓動AUTO_INCREMENT:
ALTER TABLE mytable AUTO_INCREMENT = 1
這不適合我。可能是什麼原因? –
@NBhargav由於您可能在您的表上使用InnoDB引擎而不是MyISAM,因此第一個不支持重置索引。 –
如何在更改auto_increment值之前刪除所有行 –
一個有趣的事實。
我確信TRUNCATE
總會有更好的表現,但在我的情況下,與外鍵,人口只有幾行約30表的數據庫,它花了大約12秒,TRUNCATE
所有表,而不是隻幾百毫秒到DELETE
的行。 設置自動增量總共增加了大約一秒,但仍然好很多。
所以我會建議嘗試兩個,看看哪個工作更快爲您的情況。
如果表有外鍵,然後我總是用下面的代碼:
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name (...);
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
但差異會在執行時間。看看Sorin的答案。
這是在任何表中使用孤立數據的好方法,這些數據表中的外鍵將被清除。據我所知,在事實之後啓用外鍵檢查不會導致MySQL重新驗證這些外鍵。這使您在參考表中包含包含*不存在*的數據的行。你甚至可以在你的桌子上甚至沒有*外鍵。 – cimmanon
- 1. 刪除表格中的所有行,並重置自動增量
- 2. 從所有表中刪除記錄ID
- 3. 從列表中刪除一行並將所有連續行刪除到N?
- 4. 對於ID值大於零的所有ID,刪除ID等於零的行。
- 5. 從mysql表中刪除所有記錄
- 6. MySQL從表中刪除所有索引
- 7. C#從所有值爲零的數據表中刪除列
- 8. mysql從表中刪除重複行
- 9. 刪除所有前導零並將數字轉化爲正數
- 10. 爲一個ID刪除所有行R
- 11. 刪除其中所有值都爲零
- 12. Rails Postgres:將表中的所有字段設置爲零,除了
- 13. 刪除mysql中除重複行之外的所有行
- 14. 刪除從表中共享相同ID的所有行
- 15. 清除表中的所有行,將標識規範重置爲零並且不影響外鍵?
- 16. 從所有表中刪除行
- 17. 刪除所有B,A從表的MySQL
- 18. 從一個重複的數據表中刪除所有行
- 19. 從數組列表中刪除所有的零?
- 20. VB.NET從dataTable刪除行將刪除所有行
- 21. 刪除Mysql表中的重複行並只保留一行
- 22. 刪除MySQL中的所有表限制
- 23. 如何刪除MySQL中的所有表?
- 24. 在qt中清除/重置模型(刪除所有行)
- 25. 刪除所有舊錶並在dbflow中重新創建表
- 26. 從表中獲取所有的ID MYSQL
- 27. 從mysql表中刪除重複項?
- 28. MySql - 從表中刪除重複
- 29. 從數據庫的所有表中刪除所有行
- 30. 刪除所有數據後將主鍵重置爲1
截斷可與非約束表很好地協作,但如果您的表具有外鍵約束,則可以考慮使用Delete方法。如果您有FK約束,請參閱此帖:[truncate foreign key constrained table](http://stackoverflow.com/questions/5452760/truncate-foreign-key-constrained-table) –
請記住截斷表不會回滾 –