You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用knex操作MySQL实现单查询批量插入多行关联数据

实现方案

1. 数据预处理

先将请求体中的公共用户字段和课程数组做拼接,生成符合表结构的待插入数据集:

const { user_id, user_name, email, courses } = req.body;

// 每个课程条目拼接用户公共字段,最终得到3条待插入数据
const insertRows = courses.map(courseItem => ({
  // 如果表中user_id是数值类型,这里可修改为Number(user_id)做类型转换
  user_id,
  user_name,
  email,
  ...courseItem
}));

2. Knex单查询批量插入

Knex的insert方法原生支持传入数组批量插入数据,在MySQL驱动下会自动生成单条INSERT多值的SQL语句,完全符合你单条查询的要求:

// 将代码中的user_courses替换为你实际的业务表名
const insertResult = await knex('user_courses').insert(insertRows);

// 如果需要返回插入后的记录ID,可补充returning方法(MySQL 8.0+及较新的knex版本支持)
// const insertResult = await knex('user_courses').insert(insertRows).returning('id');

补充说明

该方案生成的原生SQL格式如下,全程仅执行一次数据库查询,最终生成3条表记录:

INSERT INTO `user_courses` (`user_id`, `user_name`, `email`, `course_id`, `course_name`, `course_price`) 
VALUES ('1','jkalandarov','jkalandarov@gmail.com',1,'English',265),
('1','jkalandarov','jkalandarov@gmail.com',2,'Node.js',200),
('1','jkalandarov','jkalandarov@gmail.com',3,'Backend Developement',300);

内容的提问来源于stack exchange,提问作者jkalandarov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:36:02