加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:51:37 所属栏目:百科 来源:网络整理
导读:我在数据库中有一个存储项目的表.每个项目都有一个唯一的ID,DB在插入时生成(自动增量). 用户可以执行将X项添加到数据库的特定任务,但是我的程序(使用 MySQL连接器的C服务器应用程序)应该立即返回数据库生成的ID.例如,如果我添加6个项目,则服务器必须向客户端
我在数据库中有一个存储项目的表.每个项目都有一个唯一的ID,DB在插入时生成(自动增量).
用户可以执行将X项添加到数据库的特定任务,但是我的程序(使用 MySQL连接器的C服务器应用程序)应该立即返回数据库生成的ID.例如,如果我添加6个项目,则服务器必须向客户端返回6个新的唯一ID.
做这种事最快/最干净的方法是什么?到目前为止,我一直在进行INSERT,然后对每个新项目进行SELECT,或者INSERT后跟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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读