INSERT ON DUPLICATE KEY UPDATE сразу несколько строк

Я использую node.js и mysql. Я пытаюсь вставить несколько строк с одним запросом, и если строки с этим первичным ключом уже существуют, обновите его.

PK is exchange + currency1 + currency2.

Но вставляется только одна строка (вместо пяти).

Вот мой valuesArray:

  [ [ 4, 'BTC', 'IDR', 10440000, 10391000 ],
  [ 4, 'BTC', 'MYR', 2380, 2095 ],
  [ 4, 'BTC', 'ZAR', 11216, 11201 ],
  [ 4, 'BTC', 'SGD', 1100, 1093 ],
  [ 4, 'BTC', 'NGN', 403500, 402701 ] ]

и вот мой запрос:

connection.query("INSERT INTO rates (exchange,currency1,currency2,buyrate,sellrate) VALUES(?) ON DUPLICATE KEY UPDATE buyrate=VALUES(buyrate), sellrate=VALUES(sellrate)", valuesArray, function (err) {
    });

Я попытался изменить свой запрос на это (просто добавив [ ] вокруг valuesArray):

connection.query("INSERT INTO rates (exchange,currency1,currency2,buyrate,sellrate) VALUES(?) ON DUPLICATE KEY UPDATE buyrate=VALUES(buyrate), sellrate=VALUES(sellrate)", [valuesArray], function (err) {
        });

но затем я получаю эту ошибку:

{ [Error: ER_OPERAND_COLUMNS: Operand should contain 1 column(s)]
  code: 'ER_OPERAND_COLUMNS',
  errno: 1241,
  sqlState: '21000',
  index: 0 }

person kecman    schedule 09.12.2016    source источник
comment
Какая строка будет вставлена?   -  person Kryten    schedule 09.12.2016
comment
@Kryten первый   -  person kecman    schedule 09.12.2016
comment
Используйте ...VALUES ? ON DUPLICATE... (без скобок) и [valuesArray] (со скобками).   -  person Solarflare    schedule 09.12.2016
comment
Используйте VALUES? вместо VALUES(?) и см.: stackoverflow.com/questions/8899802/   -  person Bernd Buffen    schedule 10.12.2016
comment
@BerndBuffen да, я видел этот вопрос до того, как опубликовал свой, но он мне не помог. Solarflare решил мою проблему. Я просто не знаю, как продвигать его ответ, чтобы он был принят на этот вопрос. В любом случае спасибо за ваши усилия!   -  person kecman    schedule 10.12.2016
comment
stackoverflow.com/questions/3653462/   -  person e4c5    schedule 11.12.2016
comment
@Solarflare, пожалуйста, ответьте на этот вопрос своим ответом из комментария, чтобы я мог пометить его как правильный и закрыть тему вопроса.   -  person kecman    schedule 11.12.2016
comment
@kecman Это был просто указатель на правильный синтаксис (о котором я был уверен, что кто-то еще спрашивал раньше, поэтому я не публиковал его в качестве ответа). Рад, что это помогло, но мой ответ будет выглядеть почти дословно, как тот, на который ссылается Бернд. На самом деле это дубликат (и его следует удалить); поскольку вы видели это раньше, и это не помогло, это может быть правдой для кого-то другого, и он может найти ваш вопрос более полезным, поэтому не стесняйтесь самостоятельно отвечать с решением (это помогло бы вам больше, чем другой ответ) . Тем не менее, он может быть помечен (и удален) как дубликат. Или удалить самостоятельно.   -  person Solarflare    schedule 12.12.2016


Ответы (1)


ответ @Solarflare:

Используйте ...VALUES ? ON DUPLICATE... (без скобок) и [valuesArray] (со скобками).

person kecman    schedule 12.12.2016