2012-06-15 3 views
2

Я использую драйвер MySQL для Node.js «node-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 с дублированием 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); 
      }); 
2

Обратите внимание, что REPLACE похожа на INSERT, а не UPDATE.

Под капотом REPLACE механически является УДАЛЕНИЕМ, а затем ИНСЕРТОМ. Он говорит так в MySQL Documentation следующим образом:

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для первичного ключа или уникального индекса, старая строка удаляется перед вставкой новой строки. См. Раздел 13.2.5, «Синтаксис INSERT».

REPLACE - это расширение MySQL стандарта SQL. Он либо вставляет, либо удаляет и вставляет. Для другого расширения MySQL для стандартного SQL, которое либо вставляет, либо обновляет - см. Раздел 13.2.5.3, «ВСТАВИТЬ ... НА ПОДКЛЮЧЕНИЕ КЛЮЧЕВЫХ ОБНОВЛЕНИЙ Синтаксис».

Если вы хотите увеличить колонку count, используйте INSERT INTO ... ON DUPLICATE KEY UPDATE.

Пожалуйста, убедитесь, что JavaScript Engine может работать с 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, но im борется с синтаксисом. Im после примера синтаксиса для "node-mysql" lib. – Ben

+0

BTW Отказ от ответственности: Я не разработчик (не с августа 2006 года), а не пользователь JavaScript Engine. Я основывал свой подход только на MySQL. – RolandoMySQLDBA