我有一张桌子可以制作临时ID。当我删除表的所有行时,此表的自动递增值将重置为0。但我不想重置自动增量。 我该怎么办?
答案 0 :(得分:5)
任何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可能是由几个原因引起的。
您使用TRANCATE table
清空表格。 TRUNCATE
不仅会删除行,还会按设计重置自动增量值。
改为使用DELETE FROM table
。
表引擎是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版本。