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