【发布时间】:2018-01-19 10:29:02
【问题描述】:
我有一个数据库,其中的表使用 InnoDB 和一个自动增量字段作为主键。我想知道我是否可以相信使用auto_increment 的字段的最高值始终是最新的。
在这一点上我没有发现任何明确的内容。
【问题讨论】:
-
因为可以删除行,NO。即使
auto_increment是一个连续计数器,也可能会删除一些条目,并且您可能会发现一个低于当前auto_increment的值。例如,假设您插入 10 条记录,auto_increment将位于 10。如果有人运行删除查询以删除该列的大于 1 的记录,则您的最大查询只会找到 1,而不是 10。但是,在下一个插入查询,auto_increment的值将是 11,而不是 2。如果它可能与您的问题有关,请参阅关于LAST_INSERT_ID()的建议答案。 -
我的问题可能令人困惑,或者我可能没有完全理解您要解释的内容。事实上,我的问题是关于
selectstatement。所以我暗示如果我选择auto_increment字段的最大值,我是否总是有最近的条目? -
不,因为删除因素,
LAST_INSERT_ID()仅在 INSERT 查询之后是相对的。 -
对不起,我还是不明白。删除因素在这里意味着什么?我的意思是,如果我删除一些条目,现有的最高值仍然是最新的没有?
-
你知道的,你可以自己测试这个方面。创建一个新表,添加一些条目,以便
id列(设置为auto_increment)具有从 1 到 5 的值(或者任何您喜欢的值)。然后删除一些条目,比如大于 1,然后看看当您选择id列的最大值时会得到什么。您将不会获得auto_increment值的最大值,但只会获得id列的表中存在的最大值。
标签: mysql innodb auto-increment