正在获取生成的无需第二个查询的自动增量ID(MySQL)
Getting generatedauto-increment ID without second query (MySQL)
我已经搜索了一段时间,了解如何从"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
如果这不是你想要实现的目标,请告诉我。
相关文章:
- C++MySQL C api用户输入行
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 使用mysql c++连接器的未定义引用
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 无法在C++中建立与MySQL数据库的连接
- mysql C++ connector [mysql-connector-c++-8.0.19-linux-glibc2
- 如何获取 GLFW 窗口 ID?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- Poco FindMySql.cmake 无法找到 MySQL 源代码
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- MySQL C++连接器链接错误
- 显示数组中的学生 ID 和最高分
- c ++ mysql 连接器从字符串中选择 id
- 正在获取生成的无需第二个查询的自动增量ID(MySQL)
- C++MySql获取最后插入的id
- DBExpress和mysql最后插入id