最近在学习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语句,把数据“平铺”放在一个数组中。