如何在删除记录后从最后一次停止的位置创建一个id auto_increment?

时间:2010-03-27 21:44:16

标签: mysql

这不是什么大不了的事,但我想知道是否可以做到。现在,当我插入一条新记录时,id字段auto_increment并设置为主键会将其值增加一:

id | first_name | last_name
------------------------------
1  | John       | Smith
2  | Jane       | Doe

但是如果我删除了记录2,那么我插入的下一个将具有3的id。是否有任何方法可以使其自动具有id(无需手动插入)?

2 个答案:

答案 0 :(得分:1)

auto_increment计数器(至少使用InnoDB)保存在表元数据中,并且独立于表中的数据:当某些数据时,它会递增插入,就是这样。

所以,不,不可能让你的auto_increment列获得最大值+ 1 - 或者至少不是插入时间。


我想一个解决办法可能是alter表,以强制auto_increment计数器为新值。不确定你可以将它设置为比当前值更低的值,不过(这正是你想要做的)

有关更多信息,请参阅the manual page of alter table 上的这一段(引用,强调我的)

  

要更改的值   AUTO_INCREMENT计数器将被使用   对于新行,请执行以下操作:

ALTER TABLE t2 AUTO_INCREMENT = value;
     

您无法将计数器重置为小于或等于任何值的值   已被使用。对于
  MyISAM,如果值小于或   等于当前的最大值   在AUTO_INCREMENT列中,   值重置为当前最大值   加一。
对于InnoDB,如果是值   小于当前的最大值   在列中,没有发生错误和   当前序列值不会改变。


所以,根据手册:

  • 您可以更改auto_increment
  • 的值
  • 您可以将其设置为表格中列的最大值(加一?)。
    • 要小心你的做法,因为尝试使用太低的值,使用InnoDb,将不会有任何变化。


不过,请注意,使用alter table可能不应该经常 ...

答案 1 :(得分:0)

DELETE FROM tbl WHERE id = 4;
ALTER TABLE tbl AUTO_INCREMENT = MAX(id) + 1;