正在获取生成的无需第二个查询的自动增量ID(MySQL)

Getting generatedauto-increment ID without second query (MySQL)

本文关键字:ID MySQL 第二个 获取 查询      更新时间:2023-10-16

我已经搜索了一段时间,了解如何从"INSERTINTO…(…)VALUES(…)"中获取生成的自动递增ID。即使在stackerflow上,我也只能在后续查询中找到使用"SELECT LAST_INSERT_ID()"的答案。我发现这种解决方案不令人满意,原因有很多:

1) 这将有效地使发送到数据库的查询增加一倍,尤其是因为它主要处理插入。

2) 如果多个线程同时访问数据库,会发生什么情况?如果多个应用程序同时访问数据库,该怎么办?在我看来,这些价值观注定会变得错误。

我很难相信MySQL C++连接器不会提供Java连接器和PHP连接器所提供的功能。

http://forums.mysql.com/read.php?167,294960295250

sql::Statement* stmt = conn->createStatement(); 
 sql::ResultSet* res = stmt->executeQuery("SELECT @@identity AS id"); 
 res->next(); 
 my_ulong retVal = res->getInt64("id");

简而言之,如果您的ID列不是auto_increment列,那么您也可以使用

SELECT @@identity AS id

编辑:

不知道您所说的第二次查询/往返是什么意思。首先,我以为你想知道一种不同的方法来获得最后插入行的ID,但看起来你更感兴趣的是知道你是否可以节省往返行程?

如果是这样的话,那么我完全同意@WhozCraig;您可以在单个语句中输入两个查询,如inser into tab value ....;select last_inserted_id(),这将是一个单独的调用

你可以有下面这样的存储过程来做同样的事情,并保存往返

create procedure myproc
as 
begin
insert into mytab values ...;
select last_inserted_id();
end

如果这不是你想要实现的目标,请告诉我。