0

我一直在寻找如何从“INSERT . INTO ... (...) VALUES (...)”获取生成的自动增量 ID。即使在 stackoverflow 上,我也只能在后续查询中找到使用“SELECT LAST_INSERT_ID()”的答案。由于多种原因,我发现此解决方案不能令人满意:

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

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

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

4

1 回答 1

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()单个调用

或者

您可以使用下面的存储过程来执行相同的操作并保存往返行程

create procedure myproc
as 
begin
insert into mytab values ...;

select last_inserted_id();
end

让我知道这是否不是您想要实现的目标。

于 2013-08-14T18:49:46.220 回答