繁体   English   中英

使用MYSQL LAST_INSERT_ID()来检索插入行的ID?

[英]Using MYSQL LAST_INSERT_ID() to retrive the ID of inserted row?

我有一个表有一个AUTO INCREMENT列。 我必须在插入新行时检索此列的值(我需要新行的值)。 我已经阅读了很多关于它并找到了不同的解决方案,一个是使用SELECT LAST_INSERT_ID() 我听说过很多不同的事情。 我可以或不可以使用它吗? 我担心另一个连接可能会在我能够调用SELECT LAST_INSERT_ID()之前插入一个新行,因此得到错误的ID。

总结一下,使用SELECT LAST_INSERT_ID()是否安全? 如果没有,我如何以安全的方式检索最后插入的ID?

我不认为你需要担心你在这里提到的情况。

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

有关详细信息,请参阅this

虽然,如果他们有不同的意见,我很乐意从别人那里读到。

如果您拥有该表的最后一个id是至关重要的,则可以锁定表以进行写入,然后使SELECT MAX(id) FROM table_name然后解锁表。

生成的ID是基于每个连接的,因此您不应该有任何问题! 这篇文章更详细。

是的,根据官方文件,这是安全的:

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

取自: MYSQL文档12.13。 信息功能

如果您正在使用PDO,请使用PDO::lastInsertId.

如果您使用的是mysql,请使用mysqli::$insert_id.

是的,使用AI是安全的这个帖子说的是: http//dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

而不是直接使用select语句,尝试使用preparedStatement.

你也可以使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM