这不是什么大不了的事,但我想知道是否可以做到。现在,当我插入一条新记录时,id字段auto_increment并设置为主键会将其值增加一:
id | first_name | last_name
------------------------------
1 | John | Smith
2 | Jane | Doe
但是如果我删除了记录2,那么我插入的下一个将具有3的id。是否有任何方法可以使其自动具有id(无需手动插入)?
答案 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
不过,请注意,使用alter table
可能不应该经常 ...
答案 1 :(得分:0)
DELETE FROM tbl WHERE id = 4;
ALTER TABLE tbl AUTO_INCREMENT = MAX(id) + 1;