如何防止mySQL重置自动增量值?

时间:2012-01-11 17:33:27

标签: mysql auto-increment reset

我有一张桌子可以制作临时ID。当我删除表的所有行时,此表的自动递增值将重置为0。但我不想重置自动增量。 我该怎么办?

2 个答案:

答案 0 :(得分:5)

比较TRUNCATE TABLE

  

任何AUTO_INCREMENT值都会重置为其起始值。这是真的   甚至对于通常不重用序列的MyISAM和InnoDB   值。

...与DELETE FROM

  

如果删除包含最大值的行   AUTO_INCREMENT列,该值不会重用于MyISAM或InnoDB   表。如果使用DELETE FROM tbl_name删除表中的所有行   (在没有WHERE子句的情况下)在自动提交模式下,序列重新开始   适用于除InnoDB和MyISAM之外的所有存储引擎。有一些   InnoDB表的此行为的例外情况,如章节中所述   13.3.5.3,“InnoDB中的AUTO_INCREMENT处理”。

     

对于MyISAM表,您可以指定AUTO_INCREMENT辅助列   在多列密钥中。在这种情况下,重用从中删除的值   即使对于MyISAM表,序列的顶部也会出现。见章节   3.6.9,“使用AUTO_INCREMENT”。

答案 1 :(得分:2)

将自动增量值重置为0可能是由几个原因引起的。

原因1

您使用TRANCATE table清空表格。 TRUNCATE不仅会删除行,还会按设计重置自动增量值。

改为使用DELETE FROM table

原因2

表引擎是InnoDB。 InnoDB不会在磁盘上存储自动增量值,因此在MySQL服务器关闭时会忘记它。当MySQL再次启动时,InnoDB引擎以这种方式恢复自动增量值:SELECT (MAX(id) + 1) AS auto_increment FROM table。这是a bug,在MySQL 8.0版中是fixed

更改表格引擎:ALTER TABLE table ENGINE = MyISAM。或者在MySQL服务器发布时将其更新到8.0版本。