为什么mysql autoincrement会增加上次使用的id而不是最后一个现有的id

时间:2014-01-10 07:06:20

标签: mysql

我正在使用mysql,我正在看一个奇怪的行为。 场景: 我有table_id作为primary key的表格,其设置为auto-increment

table_id  more_columns
1         some value
2          others

现在,如果我删除第2行,再插入一行,则table_id变为3(预期为2)

table_id  more_columns
    1         some value
    3          recent

为什么会这样?在这里,我失去了一些ids(我知道它们并不重要)。请对此行为进行一些说明

3 个答案:

答案 0 :(得分:1)

在自动增量字段中如果删除了某行,则不会重新分配该行的auto_increment列。

有关详细信息,请参阅here

为什么自动增量不使用已删除的值的原因可以refer here(@AaronBlenkush的评论中提到)。

答案 1 :(得分:0)

MySQL auto_increment列在内部维护一个数字,并且即使在删除后也会一直增加它。如果您需要填写空白区域,则必须自己在PHP中处理它,而不是在表定义中使用auto_increment关键字。

如果要维护外键关系,回滚以填充空行id会导致各种困难,并且确实不建议。

可以使用SQL语句重置auto_increment,但不建议这样做,因为它会导致重复的键错误。

-- Doing this will cause problems!
ALTER table AUTO_INCREMENT=12345;

修改 要按照注释中的说明强制执行外键关系,您应该添加到表定义中:

FOREIGN KEY (friendid) REFERENCES registration_table (id) ON DELETE SET NULL;

填写正确的表格和列名称。现在,当从注册中删除用户时,他们的朋友关联将被清零。如果您需要与其他用户重新关联,则必须使用PHP进行处理。 mysql_insert_id()不再有用。

如果您需要在删除后仍然在数据库中找到编号最高的ID以与朋友关联,请使用以下内容。

SELECT MAX(id) FROM registration_table;

删除后写下此查询

ALTER TABLE tablename AUTO_INCREMENT = 1

答案 2 :(得分:0)

auto_increment值是每个表内部存储的计数器。柜台只会增加,永不减少。 针对该表触发的每个语法正确的INSERT语句都会递增此计数器,即使它已回滚,也为您定义主键的插入值。