【发布时间】:2017-10-17 00:24:34
【问题描述】:
我正在尝试使用一个 mysql 语句插入大约 1000 行,如果键已经存在,则更新该行。
我在 nodejs 中使用 this 模块进行此操作。
我的代码目前如下所示:
this.conn.query("INSERT INTO summoners VALUES ?" +
" ON DUPLICATE KEY UPDATE name = VALUES(name), rank = VALUES(rank), points = VALUES(points), satisfyCriteria = VALUES(satisfyCriteria), priority = VALUES(priority)," +
" recentlyChecked = VALUES(recentlyChecked), hotStreak = VALUES(hotStreak), veteran = VALUES(veteran), freshBlood = VALUES(freshBlood), " +
" wins = VALUES(wins), losses = VALUES(losses)", sql_data, (err) => {
if( err ){
logger.error("Error during summoner insert ", err)
}
else {
cb();
}
})
sql_data 是一个嵌套数组。根据 libaray 的文档:
嵌套数组被转换为分组列表(用于批量插入),例如 [['a', 'b'], ['c', 'd']] 变成 ('a', 'b'), ('c', 'd')
因此我认为这应该可行,但目前我收到此错误
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Hy Dag3', '55040464', 'master', 114, true, false, false, false, true, false, 34' at line 1
调试 sql 如下所示:
'INSERT INTO summoners VALUES \'Hy Dag3\', \'55040464\', \'master\', 114, true, false, false, false, true, false, 343, 279 ON DUPLICATE KEY UPDATE name = VALUES(name), rank = VALUES(rank), points = VALUES(points), satisfyCriteria = VALUES(satisfyCriteria), priority = VALUES(priority), recentlyChecked = VALUES(recentlyChecked), hotStreak = VALUES(hotStreak), veteran = VALUES(veteran), freshBlood = VALUES(freshBlood), wins = VALUES(wins), losses = VALUES(losses)'
这是不正确的。
谁能帮我完成这项工作?
【问题讨论】: