У меня есть база данных на 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 и имя в качестве первичных ключей.
Доступ к БД осуществляется через 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 является FOREIGN KEY