2017-08-11 66 views
0

我有一个使用InnoDB和自动增量字段作为主键的数据库。我想知道是否可以依靠使用auto_increment的字段的最高值总是最近的事实。Mysql:自动增量最高值总是最近的吗?

我在这一点上没有发现任何明确的问题。

+1

因为行可以被删除,NO。即使'auto_increment'是一个连续计数器,一些条目可能会被删除,并且您可能会发现一个低于当前'auto_increment'的值。例如,假设你插入了10条记录,'auto_increment'将会是10.如果有人运行删除查询来删除该列的记录大于1,那么你的max查询只会找到1,而不是10.然而,在下一个插入查询,'auto_increment'值将是11,而不是2.如果可能与您的问题有关,请参阅关于'LAST_INSERT_ID()'的建议答案。 –

+0

我的问题可能是令人困惑,或者我可能没有得到你想要解释的内容。事实上,我的问题是关于“选择”陈述。所以我暗示,如果我选择'auto_increment'字段的最高值,我是否总是拥有最多的rectent条目? – user3292788

+0

不,因为删除因素,并且'LAST_INSERT_ID()'仅在INSERT查询后立即相对。 –

回答

0

并非总是如此。如果您插入一个值并将其删除,那么最大值不会是最近的值。

我建议你在插入东西后应该用LAST_INSERT_ID()

对于LAST_INSERT_ID(),最近生成的ID在每个连接的基础上维护在 服务器上。它不会被另一个 客户端更改。如果使用非魔术值更新另一个AUTO_INCREMENT 列(即,非NULL值且 不是0),它甚至不会更改。

Source

+0

感谢您的回答,但我忘了指定它是用于选择语句。 – user3292788

+0

是的,没问题,你可以在SELECT中使用它。像'SELECT * FROM table_name WHERE id = LAST_INSERT_ID()' – Ayushya

+0

好吧,我的意思是没有任何INSERT,只是一个SELECT语句。我会用MAX代替。 – user3292788