2016-09-21 43 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

相关问题