1

mysql AUTO_INCREMENT doc中,我没有找到关于它如何在插入时选择新 id 的详细说明,

它是缓存“最大数量”键,还是找到未使用的最小 ID?任何参考源代码?

编辑:

我已经测试过了,看起来它不会重复使用已删除项目的 ID,但我不确定。我想使用 id 作为排序的时间戳,所以我必须 100% 确定它是这样的,这意味着这个逻辑解释应该有一个可信的参考,无论是在源代码还是在 mysql 文档中。

4

2 回答 2

1

它不会选择未使用的最小数字。它总是将其分配的最后一个 ID 加一。这将是一个恒定时间操作。(与选择未使用的最小数字相反,这将是线性时间*)。

例如,如果您插入 10 行,则删除第 5 行。下一个插入的行将获得 ID 11,而不是 5。

通过在删除时接受惩罚,可以很容易地将该操作优化为恒定时间(在插入时)。然而,这不是 MySQL 所做的。

于 2012-12-10T12:50:22.070 回答
0

是的,这就是工作方式auto_increment

  • 每个新行的值都会增加

  • 该值是唯一的,不能重复

  • 如果删除了一行,auto_increment则不会重新分配该行的列。

  • auto_increment可以使用 mySQL 函数访问最后插入的行的值,LAST_INSERT_ID()但必须在插入查询之后立即在同一数据库连接中调用它。

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

于 2012-12-10T13:04:51.330 回答