我一直在搜索如何从“INSERT。INTO ......(...)VALUES(...)”获取生成的自动增量ID。即使在stackoverflow上,我也只能在后续查询中找到使用“SELECT LAST_INSERT_ID()”的答案。我发现这个解决方案不能令人满意,原因有很多:
1)这将有效地将发送到数据库的查询加倍,特别是因为它主要是处理插入。
2)如果多个线程同时访问数据库会发生什么?如果多个应用程序同时访问数据库怎么办?在我看来,价值观必然会变得错误。
我很难相信MySQL C ++连接器不会提供Java连接器以及PHP连接器提供的功能。
答案 0 :(得分:0)
取自http://forums.mysql.com/read.php?167,294960,295250
的示例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()
这样的单个语句中打入您的查询,这将是一次调用
OR
你可以像下面这样存储过程来做同样的事并保存往返
create procedure myproc
as
begin
insert into mytab values ...;
select last_inserted_id();
end
如果这不是您想要实现的目标,请告诉我。