插入重复键一次更新多行

问题描述 投票:0回答:2

我正在使用node.js和mysql。我正在尝试使用一个查询插入多行,如果具有该主键的行已经存在,请更新它。

PK是

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 }
mysql sql node.js insert-update
2个回答
4
投票

@Solarflare 的回答:

使用

...VALUES ? ON DUPLICATE...
(不带括号)和
[valuesArray]
(带括号)。


0
投票

确保valuesArray也不为空!这让我很头疼

© www.soinside.com 2019 - 2024. All rights reserved.