gpt4 book ai didi

mysql - Node JS在使用事务时将对象数组插入mysql数据库

转载 作者:可可西里 更新时间:2023-11-01 06:45:36 25 4
gpt4 key购买 nike

我正在使用 node-mysql 将记录添加到数据库,但当要插入的记录是一个对象数组并且我需要操作是一个事务时,我面临着挑战。我通过创建一个测试项目来简化我的问题,以更好地解释我的问题。

比方说我必须要表 usersorders 并且要插入的数据看起来像这样

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!');
});
});
}
});
});

但是,我在遍历 orders 数组时遇到问题,而不必在 for 循环中多次调用 connection.commit

最佳答案

我建议首先在 for 循环中为订单表的多行插入查询构造一个简单的字符串,然后在 for 循环外执行它。使用 for 循环仅构造字符串。因此,您可以随时回滚查询或出错。通过多次插入查询字符串,我的意思如下:

INSERT INTO your_table_name
(column1,column2,column3)
VALUES
(1,2,3),
(4,5,6),
(7,8,9);

关于mysql - Node JS在使用事务时将对象数组插入mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com