重启MySQL后LAST_INSERT_ID

时间:2013-07-15 10:00:45

标签: mysql

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

SELECT LAST_INSERT_ID();

问题

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

LAST_INSERT_ID在重启MySQL或重启系统之前是否正常工作?

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:4)

MySQL Docs中所述,

  

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

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

答案 1 :(得分:2)

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

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

如果您重新启动服务器,或断开并重新连接againg,那么您没有使用与插入时相同的连接,这就是您获得0

的原因

答案 2 :(得分:1)

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

  

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

要获得所需内容,只需创建一个新查询:

SELECT MAX(ID) FROM ExampleTable;

如果您无法以预期的方式使用 LAST_INSERT_ID