我正在尝试在插入新记录后通过以下语句检索LAST_INSERT_ID
,它可以正常工作。
SELECT LAST_INSERT_ID();
问题
在表中插入新记录并重新启动MySQL Server然后尝试检索LAST_INSERT_ID
时,它会获得0
值!
LAST_INSERT_ID
在重启MySQL或重启系统之前是否正常工作?
任何帮助都将不胜感激。
答案 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 。