Node.js + SQL - 是否比Select更快地插入查询?

时间:2018-04-24 09:36:20

标签: mysql sql node.js foreach async-await

我在node.js中遇到SQL问题。

我有一个阵列'数据'其中包含从异步函数返回的一些数据,如果没有相同数据的结果,我想把它放到MySQL数据库中。数组中有一些重复的对象,但我想只将一个放入数据库。

功能示例:

async function data_name(param){
    var data = [];
    data.push({
    name: param,
    sname: 'sname',
    url: 'url',
    report: 'report'
    });
    return data;
}

然后我运行以下代码:

var data = await data_name('name');
data.forEach(item=>{
    var chk = "SELECT * FROM `?` WHERE `name` = ? AND `sname` = ?;";
    con.query(chk, [tablename, item.name, item.sname], function(er,items){
    if(er) throw er;
    if(items.length < 1){
        var insert = "INSERT INTO `?` (name, sname, url, report) VALUES (?,?,?,?)";
        con.query(insert, [tablename, item.name, item.sname, item.url, item.report], function(erg,added){
            if(erg) throw erg;
            console.log('Item added: ' + item.name);
        });
    }
    else{
        if(items[0].report != item.report){
            var upd = "UPDATE `?` SET report = ? WHERE id = ?";
            con.query(upd, [tablename, item.report, items[0].id], function(ere,edited){
                if(ere) throw ere;
                console.log('Item updated: ' +items[0].name);
                });
            }
        }
//broken code below
    var adc = "SELECT * FROM `links` WHERE `link` = ?;";
    con.query(adc, item.url, function(erc, results){    
        //tried also with: results[0] === undefined || results[0] === null
        var test = item.url + ' ' + results.length;
        console.log(test);
        if(results.length < 1){
            var add_c = "INSERT INTO `links` (link_name, link_url) VALUES (?,?)";
            con.query(add_c, [item.name, item.url], function(era, a_link){
                if(era) throw era;
            });
        }
        else{console.log('Record exists');}
    });
    });
});

第一个SQL效果很好:它将所有记录都插入到数据库中,没有重复项,如果需要,它会更新值。

如果数据库为空,则第二个SQL(我之前提供的代码中的注释提到)无法正常工作。它复制了数据库中的记录(运行后数据库有470条记录,而每条记录重复约8次)。

测试变量打印例如:

问题仅在数据库为空时存在(如果我第二次运行代码,第二个SQL不会插入记录新记录并在控制台中打印&#39;记录存在&#39;

任何想法可能是什么原因?

0 个答案:

没有答案