2012-06-15 24 views
2

我使用Node.js「node-mysql」的MySQL驅動程序,但在語法上掙扎着做一個REPLACE into並增加一個計數器。這裏是我到目前爲止,注意count場是我想遞增1當前表值:node-mysql:REPLACE進入語句增加一個當前表值

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

任何人都可以就如何做到這一點?

回答

2

我找到了解決方案,使用INSERT與對重複密鑰更新:

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); 
      }); 
2

請記住,REPLACE與INSERT NOT UPDATE類似。

在引擎蓋下,REPLACE在機械上是DELETE,後面是INSERT。它說,所以在MySQL Documentation如下:

更換作品酷似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) { 

試試看!

+0

感謝您的答覆,我明白一個道理。 lib確實支持REPLACE,但是我正在努力處理語法。我以「node-mysql」lib的語法爲例。 – Ben

+0

BTW免責聲明:我不是開發人員(自2006年8月以來),而不是JavaScript引擎的用戶。我基於我的回答完全在MySQL上。 – RolandoMySQLDBA