截断从1开始插入;但删除后从先前的值恢复

时间:2017-02-22 11:06:49

标签: mysql database

在我的表中有列名id,它是自动增量整数。当我截断表然后尝试执行插入查询时,它从1开始,但是如果我执行删除操作然后尝试插入那么它只是从之前的值恢复。为什么insert查询对delete和truncate的执行方式不同。如果表中没有条目,它应该始终从1开始。

示例: (1)原始表 enter image description here

(2)删除所有行然后插入 enter image description here

(3)截断表然后插入 enter image description here

3 个答案:

答案 0 :(得分:1)

自动增量功能的当前最大值存储在表定义中(运行show create table idle时可以看到它)。 从表中删除所有行时,自动增量值将保持不变。截断表时,基本上会删除表并重新创建表,这会将自动增量值重置为0.

希望这会有所帮助。

答案 1 :(得分:1)

我认为您即将重置自动增量,在delete查询后运行此查询:

 ALTER TABLE tablename AUTO_INCREMENT = 1 ;

注意:注意重复键,如果删除了一些ID并将id重置为1,而id = 2或n则存在!

  

请注意,您无法将计数器重置为小于或等于任何已使用的值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大值加1。对于InnoDB,如果该值小于列中的当前最大值,则不会发生错误,并且不会更改当前序列值。

this topic

中提到的其他一些行动和说明

答案 2 :(得分:0)

你在AUTO INCREMENT中给出id这就是为什么它的行为就像这样。每当你在删除操作的情况下截断其重置身份时,它从你的id的最后一个值开始。如果不希望此行为,请从AUTO INCREMENT字段中删除id索引。