【发布时间】:2020-02-20 00:33:52
【问题描述】:
我在 MariaDB(类似 MySQL 的实现)上有一个数据库,其表如下:
product_qts
product_id | name | value
-----------------------------------------
1 | xxs | 2
1 | l | 1
CREATE TABLE IF NOT EXISTS products_qts (
product_id MEDIUMINT NOT NULL,
name CHAR(50) NOT NULL,
value TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (product_id, name),
CONSTRAINT product_qt_fk FOREIGN KEY (product_id)
REFERENCES products(id) ON DELETE CASCADE) ENGINE=INNODB
我将 product_id 和 name 设置为主键。
通过 node.js 后端访问数据库。
因此,当用户想要更新产品时,他会提交新的数量 然后我调用这个函数:
updateQtsById: (qtsArray) => {
return new Promise(function (resolve, reject) {
pool.query('INSERT INTO products_qts (product_id, name, value) ' +
'VALUES ? ' +
'ON DUPLICATE KEY UPDATE ' +
'value=VALUES (value) ',
qtsArray
)
.then(result => {
resolve(result.affectedRows);
})
.catch(error => {
reject(error);
});
});
}
我发给它的参数是这样的:
[ [ 1, 'onesize', 3 ], [ 1, 'xxs', 2 ], [ 1, 'xs', 1 ] ]
现在它不会出现任何错误,但它不会插入多个值,而是更新第一个值然后停止。我哪里错了?哪种方式最好?
编辑:
product_id 是外键
【问题讨论】:
-
qtsArray变量的内容是什么? -
@SlavaRozhnev 对不起,你是对的,就是这样 [ [ 1, 'onesize', 3 ], [ 1, 'xxs', 2 ], [ 1, 'xs', 1 ] ] 我编辑了答案
-
尝试将
id INT AUTO_INCREMENT PRIMARY KEY,添加到表中然后重复相同的操作 -
@flakerimi 但如果 (product_id,name) 重复,我需要它更新,如何实现?
-
检查这个:mysqltutorial.org/…
标签: mysql node.js mariadb upsert