在mysql AUTO_INCREMENT doc中,我没有找到关于如何在插入时选择新id详细说明,
它是缓存一个“最大数量”的键,还是找到一个最小的不使用的ID?有没有关于源代码的参考?
编辑:
我已经测试过了,看起来它不会重用已删除项的ID,但我不确定。我想使用id作为排序的时间戳,所以我必须100%确定它是这样的,这意味着这个逻辑解释应该有一个可信的引用,无论是在源代码中还是在mysql文档中。
发布于 2012-12-10 20:50:22
它不会选择未使用的最小数字。它将始终将1递增到它所分配的最后一个ID。这将是一个恒定的时间操作。(而不是选择没有使用的最小数字,这将是线性时间*)。
例如,如果插入10行,则删除第5行。下一个插入的行将获得ID 11,而不是5。
通过在删除时接受惩罚,可以非常容易地将该操作优化为恒定时间(在插入时)。然而,这并不是MySQL所做的。
发布于 2012-12-10 21:04:51
是的,这就是auto_increment的工作方式。
auto_increment列将不是唯一的。可以使用mySQL函数LAST_INSERT_ID()访问最后插入行的值,但必须在同一数据库连接中的插入查询之后立即调用该函数。http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
https://stackoverflow.com/questions/13801261
复制相似问题