node-mysql:REPLACE into语句递增当前表值

时间:2012-06-15 16:30:29

标签: mysql node.js replace node-mysql

我正在使用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) {

有人可以建议如何做到这一点吗?

2 个答案:

答案 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);
            });