【问题标题】:node-mysql: REPLACE into statement incrementing a current table valuenode-mysql:REPLACE into 增加当前表值的语句
【发布时间】:2012-06-15 16:30:29
【问题描述】:

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

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

【问题讨论】:

    标签: mysql node.js replace node-mysql


    【解决方案1】:

    请记住,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) {
    

    试试看!!!

    【讨论】:

    • 谢谢回复,原理我明白了。该库确实支持 REPLACE,但我在语法上苦苦挣扎。我在“node-mysql”库的语法示例之后。
    • BTW 免责声明:我不是开发人员(自 2006 年 8 月以来),也不是 JavaScript 引擎的用户。我的答案完全基于 MySQL。
    【解决方案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);
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2011-10-19
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多