2

我正在使用 Node.js 的 MySQL 驱动程序“node-mysql”,但在语法上苦苦挣扎,以执行 aREPLACE into并增加一个计数器。这是我到目前为止所拥有的,请注意该count字段是我想要将当前表值增加 1 的位置:

connection.query('REPLACE INTO links SET ?', { symbol: statName, timestamp: now, count: count + 1  }, function(err, result) {

谁能建议如何做到这一点?

4

2 回答 2

2

请记住,REPLACE 类似于 INSERT not UPDATE。

在引擎盖下,REPLACE在机械上是一个 DELETE,然后是一个 INSERT。它在MySQL 文档中这样说,如下所示:

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) {

试试看 !!!

于 2012-06-15T17:16:52.300 回答
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);
            });
于 2012-06-17T08:29:04.217 回答