Node JS使用事务时将对象数组插入mysql数据库
作者:互联网
我使用node-mysql将记录添加到数据库,但是当要插入的记录是一个对象数组并且我需要将操作作为事务时,我正面临挑战.我通过创建一个测试项目来简化我的问题,以更好地解释我的问题.
让我们说我必须表用户和订单,并且要插入的数据看起来像这样
var user = {
name: "Dennis Wanyonyi",
email: "example@email.com"
};
var orders = [{
order_date: new Date(),
price: 14.99
}, {
order_date: new Date(),
price: 39.99
}];
我想先将用户插入数据库,然后使用insertId为该用户添加每个订单.我正在使用一个事务,因为如果出现错误,我想回滚整个过程.以下是我尝试使用node-mysql transactions插入所有记录的方法.
connection.beginTransaction(function(err) {
if (err) { throw err; }
connection.query('INSERT INTO users SET ?', user, function(err, result) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
for (var i = 0; i < orders.length; i++) {
orders[i].user_id = result.insertId;
connection.query('INSERT INTO orders SET ?', orders[i], function(err, result2) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
connection.commit(function(err) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
}
});
});
但是我在迭代订单数组时遇到问题,而不必在for循环中多次调用connection.commit
最佳答案:
我建议首先在for循环中为orders表的多行插入查询构造一个简单的字符串,然后在for循环之外执行它.使用for循环仅构造字符串.因此,您可以随时或在出错时回滚查询.通过多个插入查询字符串,我的意思如下:
INSERT INTO your_table_name
(column1,column2,column3)
VALUES
(1,2,3),
(4,5,6),
(7,8,9);
标签:mysql,node-js,transactions,node-mysql 来源: https://codeday.me/bug/20190516/1114849.html