c++ - 选择多个插入行的最快方法

标签 c++ mysql

我在数据库中有一个存储项目的表。每个项目都有一个唯一的 ID,数据库在插入时生成该 ID(自动递增)。
用户可以执行将 X 项添加到数据库的特定任务,但是我的程序(使用 MySQL 连接器的 C++ 服务器应用程序)应该立即返回数据库生成的 ID。例如,如果我添加 6 个项目,服务器必须返回 6 个新的唯一 ID 给客户端。
做这种事情最快/最干净的方法是什么?到目前为止,我一直在为每个新项目执行 INSERT 后跟 SELECTINSERT 后跟 last_insert_id,但是如果有 50 个项目要添加,至少需要几秒钟,这对用户体验来说一点都不好。

sql_task.query("INSERT INTO `ItemDB` (`ItemName`, `Type`, `Time`) VALUES ('%s', '%d', '%d')", strName.c_str(), uiType, uiTime);

获取ID:

uint64_t item_id { sql_task.last_id() }; //This calls mysql_insert_id

最佳答案

我认为您需要稍微重新考虑一下您的设计。让我们用销售订单做类比。通过销售订单(或发票编号),用户可以获得发票编号 (auto_incr) 以及多个订单项编号(也称为 auto_inc)。

(从 GUI)选择销售订单和所有行项目进行插入并执行插入。首先,插入销售订单行并将其 id 保存在一个变量中,以供后续调用插入行项目。但是这些行项目只是被插入而没有立即返回它们的 auto_inc id 值。应用程序最终只返回销售订单号。您的应用程序如何在后续调用中使用该销售订单号由您决定。但不需要立即检索所有 X 行或 50 行,因为它已将销售订单号卡住并保存在某处。我们将该销售订单编号命名为 XYZ。

当您确实需要这些信息时,示例调用可能如下所示

select lineItemId 
from lineItems 
where salesOrderNumber=XYZ 
order by lineItemId 

您需要记住,在多用户系统中,无法保证接收到连续的号码 block 。这对您来说也不重要,因为它们都附有正确的销售订单编号。

同样,以上只是一个类比,用于说明目的。

关于c++ - 选择多个插入行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283782/

相关文章:

c++ - 使用 placement new 正确分配数组

c++ - 引用 VC++ 代码或转换为 DLL?

c# - 未处理的异常 : System. AccessViolationException:尝试读取或写入

php - mysql_query ("SHOW DATABASES") 不显示我的数据库

Perl 脚本中的 MySQL 错误代码 2

c++ - printf int 到带有左填充空格的 char 数组

c++ - 使用 MinGW 和 Qt5.6 部署应用程序

php - 恢复具有特定 ID 的 MySQL 项目

mysql - Mysql中使用SN从表中删除多行

php - 使用 union all 或 single 语句的准备好的语句