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

如何使用Node.js向MySQL数据库插入数组类型数据

解决方案

你之前的写法无法生效是因为 INSERT INTO ... SET ? 语法仅支持单条数据对象的插入映射,无法自动解析数组为多条插入记录。以下是两种常用的正确实现方式:

方法1:使用批量插入语法(推荐,性能最优)

这是最常用的批量插入写法,SQL语法为 INSERT INTO 表名 (字段列表) VALUES ?,参数传入二维数组格式的所有值,适用于mysql、mysql2等主流Node.js MySQL驱动:

let post = [
    {id: 1, name: 'Terminal 1'},
    {id: 2, name: 'Terminal 2'}
];

// 手动指定字段映射,也可以动态从对象提取
const values = post.map(item => [item.id, item.name]);

db.query('INSERT INTO terminal (id, name) VALUES ?', [values], (err, result) => {
    if (err) throw err;
    console.log(`成功插入${result.affectedRows}条数据`);
});

如果需要动态适配对象字段,不用手动写死字段,可以用如下更灵活的写法:

let post = [
    {id: 1, name: 'Terminal 1'},
    {id: 2, name: 'Terminal 2'}
];

// 从第一条数据提取字段,自动加反引号避免关键字冲突
const fields = Object.keys(post[0]).map(field => `\`${field}\``);
// 按字段顺序生成二维值数组
const values = post.map(item => fields.map(field => item[field.replace(/`/g, '')]));

db.query(`INSERT INTO terminal (${fields.join(',')}) VALUES ?`, [values], (err, result) => {
    if (err) throw err;
    // 后续业务逻辑
});

方法2:循环单条插入(仅适合小数据量场景)

如果数据量非常小(10条以内),也可以循环调用单条插入逻辑,写法简单但会发起多次数据库请求,性能较差:

let post = [
    {id: 1, name: 'Terminal 1'},
    {id: 2, name: 'Terminal 2'}
];

for (const item of post) {
    db.query('INSERT INTO terminal SET ?', item, (err) => {
        if (err) throw err;
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:45:03