表格 t_income 如下所示
1. mysql 设置联合索引
alter table t_income add unique index(app_key,type,record_time,status);
2. controller 层
updateBatch: async function(ctx, next){
let res = await testService.updateBatch(ctx.params.record_time,ctx.input);
return response.map(ctx, {success: res});
}
3. service 层
updateBatch: async function(record_time, data){
for (let key of data){
if (!key.create_time){
key.create_time = new Date().getTime();
}
key.update_time = new Date().getTime();
}
let res = await testModel.updateBatch(data, record_time);
return res;
}
4. model 层
updateBatch: async function(data, record_time){
let values = '';
for (let key of data){
values += '('+ record_time +',' + key.app_key + ',' + key.type +',' +key.money +','+key.create_time+','+key.update_time+','+key.status+'),'
}
values = values.substr(0,values.length-1);
let sql = 'insert into t_income' +
'(record_time, app_key, type, money,create_time, update_time,status)' +
'values'+ values +' ON DUPLICATE KEY UPDATE money= VALUES(money),status = values(status);'
let res = await db.readMysql.raw(sql);
return res[0].changedRows >= 1;
}
测试数据:
结果:
由 app_key, type, status, record_time 组成的唯一索引,如果传入的该4个值相同,则视为存在该条记录,则修改, 否则视为不存在,则插入
demo: https://github.com/VikkiLrr/nodejs_update_batch.git