C++ 无需第二次查询即可获取GenerateAuto增量ID(MySQL)

C++ 无需第二次查询即可获取GenerateAuto增量ID(MySQL),c++,mysql,mysql-connector,C++,Mysql,Mysql Connector,我一直在搜索如何从“INSERT.INTO…(…)VALUES(…)”获取生成的自动增量ID。即使在stackoverflow上,我也只能在后续查询中找到使用“SELECT LAST_INSERT_ID()”的答案。我认为这个解决方案不令人满意,原因有很多: 1) 这将有效地加倍发送到数据库的查询,特别是因为它主要处理插入 2) 如果多个线程同时访问数据库,会发生什么情况?如果有多个应用程序同时访问数据库,该怎么办?在我看来,这些价值观注定会出错 很难相信MySQL C++连接器不能提供java

我一直在搜索如何从“INSERT.INTO…(…)VALUES(…)”获取生成的自动增量ID。即使在stackoverflow上,我也只能在后续查询中找到使用“SELECT LAST_INSERT_ID()”的答案。我认为这个解决方案不令人满意,原因有很多:

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

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

很难相信MySQL C++连接器不能提供java连接器和PHP连接器的特性。

< P> >从

中获得的例子 简而言之,如果ID列不是自动增量列,那么也可以使用

选择@@identity作为id

编辑:

不确定您所说的第二次查询/往返是什么意思。首先,我认为您正在尝试了解获取最后插入行的ID的另一种方法,但看起来您更感兴趣的是知道是否可以节省往返行程

如果是这样,那么我完全同意@WhozCraig;您可以在一条语句中输入两个查询,如
inser-into-tab-value。。。。;选择上次插入的id()
,这将是一次调用

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

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

select last_inserted_id();
end

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

插入API调用的返回值是多少?我认为这可能会有帮助。使用事务查询(Innodb)。这将避免您的第二个问题。如果您正在向服务器发送INSERT,并且希望返回插入的ID,您就不能
INSERT。。。。;选择最后一个插入ID()作为多语句查询并执行一次单程?注意:我是一个SQL Server的家伙,这在这里是微不足道的,但如果在MySQL上也不可能做到这一点,我会感到惊讶。如果不是的话,我会置评,我真的很好奇。。。。您需要执行该查询来获取它1)不要担心SELECT LAST_INSERT_ID将来自内存,它几乎会立即返回。2) 如果您使用MyISAM作为存储引擎,请不要担心,它不是多线程的吗。。因为桌下锁定…@SableFoste:不幸的是,这是不可能的。我们使用C++连接器,但是底层数据库是MEMSQL,它不支持事务。我澄清了问题。
create procedure myproc
as 
begin
insert into mytab values ...;

select last_inserted_id();
end