1

我试图LAST_INSERT_ID在插入新记录后通过以下语句检索,它工作正常。

SELECT LAST_INSERT_ID();

问题

在表中插入新记录并重新启动 MySQL 服务器然后尝试检索LAST_INSERT_ID时,它会获得0价值!

LAST_INSERT_ID只是在重新启动 MySQL 或重新启动系统之前工作?

任何帮助,将不胜感激。

4

3 回答 3

5

MySQL Docs中所述,

生成的 ID 在每个连接的基础上在服务器中维护。这意味着函数返回给给定客户端的值是为影响该客户端的 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCREMENT 值。此值不受其他客户端的影响,即使它们生成自己的 AUTO_INCREMENT 值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。

这意味着 - 重新启动您的一组语句后,没有影响 AUTO_INCREMENT 值的语句,因此该值未定义。

于 2013-07-15T10:04:34.000 回答
2

LAST_INSERT_ID请参阅手册页中的此文本:

The ID that was generated is maintained in the server on a per-connection basis. 

如果您重新启动服务器,或者断开连接并重新连接,那么您使用的连接与插入时使用的连接不同,这就是您得到的原因0

于 2013-07-15T10:04:36.230 回答
1

正如已经基于MySQL 参考手册所述:function_last-insert-id

生成的 ID 在每个连接的基础上在服务器中维护 。这意味着函数返回给给定客户端的值是为影响该客户端的AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。

要获得所需的内容,只需进行新查询:

SELECT MAX(ID) FROM ExampleTable;

以防您无法按预期方式使用LAST_INSERT_ID

于 2013-07-15T10:04:17.953 回答