当我将数据插入到一个全新的表中时,它将通过AUTO_INCREMENT分配一个新的ID。因此,我第一次执行插入操作时,我得到的ID为1.但是,如果删除该行并插入新数据,则该表的行为就好像仍然存在前一行(新行的ID为2)。这种行为关系到我,因为我觉得数据仍然存在于某个地方。任何想法可能是什么?为什么我的sql表维护被删除的ID?
回答
您的数据不会持续存在。 MySql维护一个关于您的表的独立表,其中包含您的表的下一个自动增量值。
ALTER TABLE tablename AUTO_INCREMENT = 1
但是,要知道,如果你重新设置下表中的另一个有效的值,你是在自找麻烦:您可以重设此。
如何访问该信息?每次我清空表格时,我都想从id = 1开始(我正在清空表格的唯一原因是用于实验和学习目的)。 – tocoolforscool
@ j3ssi3ftw - 请参阅[本主题](http://stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql)了解更多信息。但只要使用'ALTER TABLE'语句就像我在每次清空表格时所建议的那样。 –
您可以执行'truncate table tablename;'然后'ALTER TABLE tablename AUTO_INCREMENT = 1;'将自动增量重置为1 – zedfoxus
你应该简单地使用。
truncate table tablename;
仅供OP考虑:截断表会将auto_increment字段重置为其起始值:http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html – zedfoxus
“truncate table”的一个问题如果其他表中的任何外键引用表,它将不会在InnoDB或NDB表上工作。它也不会调用任何'ON DELETE'触发器。否则,它就像删除所有行并显式更改表的'AUTO_INCREMENT'值一样好(并且更快)。 –
我刚刚查了一个truncate的例子,它非常有用,但是要感谢例外。 – tocoolforscool
- 1. 为什么我的日志被删除?
- 2. 为什么我的SQL Server 2005备份不被删除?
- 3. 为什么我的sql表中的所有记录都被删除?
- 4. 为什么io.sort.record.percent被删除?
- 5. SQL 2005维护清理任务.bak文件未被删除
- 6. MS SQL 2012删除备份的维护计划我想保留
- 7. 什么被删除?
- 8. SQL删除留下的ID未被删除
- 9. 什么是已删除的函数,为什么只有我传递文件的函数被视为已删除?
- 10. 为什么我的数组被清除?
- 11. 为什么我的通知被清除?
- 12. 为什么我的服务在卸载时被删除? (WIX)
- 13. 为什么我的s3对象没有被删除
- 14. 流星 - 为什么我的包被删除?
- 15. 为什么我的空白区域被从HTML中删除?
- 16. 为什么我的令牌未被删除?
- 17. ElementTree:为什么我的名称空间声明被删除?
- 18. 为什么mysql缓存被删除临时表的列名?
- 19. PHP为什么$符号被删除
- 20. 为什么Resharper删除我的评论?
- 21. 为什么VS2010删除我的引用?
- 22. 为什么我的ListViewItem不能删除?
- 23. 如何删除顽固的SQL 2005维护计划
- 24. 为什么我需要维护像“en.some.com || fr.some.com”这样的网址?
- 25. 为什么我的SQLite数据库在被更改时被删除?
- 26. 鱼眼图表为什么不考虑文件被删除?
- 27. 为什么我的PowerShell多维数组被解释为1维数组?
- 28. 为什么我的覆盖保护函数createChildren被忽略?
- 29. 为什么org.apache.commons.math3。*被删除,可以选择什么
- 30. 为什么我的正则表达式删除空格?
你并不孤单,感觉数据持续存在。当我开始使用数据库时,我也有同样的感受。一旦你处理了auto_increment字段,你就会习惯于通过id从tablename order中选择id,name ...。如果您注意到ID 1,3,4 ...,您可以断定id 2已被删除。在某些情况下,您必须存档已删除的数据,这样可以更容易地查看删除的内容。 – zedfoxus