我试图LAST_INSERT_ID
在插入新记录后通过以下语句检索,它工作正常。
SELECT LAST_INSERT_ID();
问题
在表中插入新记录并重新启动 MySQL 服务器然后尝试检索LAST_INSERT_ID
时,它会获得0
价值!
LAST_INSERT_ID
只是在重新启动 MySQL 或重新启动系统之前工作?
任何帮助,将不胜感激。
我试图LAST_INSERT_ID
在插入新记录后通过以下语句检索,它工作正常。
SELECT LAST_INSERT_ID();
问题
在表中插入新记录并重新启动 MySQL 服务器然后尝试检索LAST_INSERT_ID
时,它会获得0
价值!
LAST_INSERT_ID
只是在重新启动 MySQL 或重新启动系统之前工作?
任何帮助,将不胜感激。
如MySQL Docs中所述,
生成的 ID 在每个连接的基础上在服务器中维护。这意味着函数返回给给定客户端的值是为影响该客户端的 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCREMENT 值。此值不受其他客户端的影响,即使它们生成自己的 AUTO_INCREMENT 值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。
这意味着 - 重新启动您的一组语句后,没有影响 AUTO_INCREMENT 值的语句,因此该值未定义。
LAST_INSERT_ID
请参阅手册页中的此文本:
The ID that was generated is maintained in the server on a per-connection basis.
如果您重新启动服务器,或者断开连接并重新连接,那么您使用的连接与插入时使用的连接不同,这就是您得到的原因0
正如已经基于MySQL 参考手册所述:function_last-insert-id:
生成的 ID 在每个连接的基础上在服务器中维护 。这意味着函数返回给给定客户端的值是为影响该客户端的AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。
要获得所需的内容,只需进行新查询:
SELECT MAX(ID) FROM ExampleTable;
以防您无法按预期方式使用LAST_INSERT_ID。