如何使用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
相关产品推荐
相关产品推荐

