我正在使用Node.js的MySQL驱动程序" node-mysql"但是在语法上努力做REPLACE into
并增加一个计数器。这是我到目前为止所做的,请注意count
字段是我想要将当前表值增加1的位置:
connection.query('REPLACE INTO links SET ?', { symbol: statName, timestamp: now, count: count + 1 }, function(err, result) {
有人可以建议如何做到这一点吗?
答案 0 :(得分:2)
请记住,REPLACE类似于INSERT not UPDATE。
引擎盖下,REPLACE机械地是DELETE,然后是INSERT。它在MySQL Documentation中如下所示:
REPLACE的工作方式与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。请参见第13.2.5节“INSERT语法”。
REPLACE是SQL标准的MySQL扩展。它可以插入,删除和插入。对于标准SQL的另一个MySQL扩展 - 插入或更新 - 请参见第13.2.5.3节“INSERT ... ON DUPLICATE KEY UPDATE语法”。
如果您想增加count
列,请使用INSERT INTO ... ON DUPLICATE KEY UPDATE。
请确保JavaScript引擎可以与INSERT INTO ... ON DUPLICATE KEY UPDATE一起使用。如果没有,您必须将计数捕获为newcount,增加newcount,并将数字输入REPLACE
connection.query('REPLACE INTO links SET ?', { symbol: statName, timestamp: now, count: newcount }, function(err, result) {
试一试!!!
答案 1 :(得分:2)
我找到了使用INSERT和ON DUPLICATE KEY UPDATE的解决方案:
connection.query('INSERT INTO links SET symbol = ?, timestamp = ?, title = ?, url = ? ON DUPLICATE KEY UPDATE count = count + 1', [statName, now, interaction.data.links.title[y], interaction.data.links.url[y]], function(err, results) {
if (err) console.log(err);
});