mysql存储过程批量处理数据

最近在学习Node.js的mysql模块,遇到一个问题:
如何调用存储过程把批量数据一次性写入表中?
想传入一个数组作为参数,但mysql存储过程不支持。
可以使用for循环,但性能差。
于是,想了一个方法:多语句执行。

现有一个user表,包含id(自增),uname,age三个字段。
存储过程MultiProc,接收两个参数(uname, age),作用是往user表插入一条数据。
现在要批量插入多条数据,比如

[
    {
        "uname": "alice",
        "age": 18
    },
    {
        "uname": "bob",
        "age": 20
    },
   ...
]

用Node.js 可以这样做:

function (datas, callback) {
    let len = datas.length;
    let sql = "call MultiProc(?, ?); ";
    let sqls = sql.repeat(len); //重复语句
    let params = [];
    for (let i = 0; i < len; i++) {
        let data = datas[i];
        params.push(data.uname, data.age);
    }
    query(sqls, params, callback);
}

简单讲,就是重复多次待执行的sql语句,把数据“平铺”放在一个数组中。

你可能感兴趣的:(mysql存储过程批量处理数据)