NodeJS - MySQL 事务未按预期工作
NodeJS - MySQL Transactions not working as expected
我正在尝试应用交易(beginTransaction
、rollback
和 commit
。但是,如果添加发票的查询(第一个查询)执行成功,我想更新供应商金额(第二个查询)。我打算通过将 UPDATE
更改为 UPDATEEE
在第二个查询中编写错误的语法。我认为这应该 rollback
。我收到查询语法错误消息,但发票添加了(第一个查询成功执行)。
我做错了什么?
Invoice.addNewInvoice = function (invoice_data,result){
sql.beginTransaction(function(err){
if (err) { throw err; }
sql.query('INSERT INTO invoice SET ?',invoice_data, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.query('UPDATEEEEE supplier SET supplier_amount = supplier_amount + ' + invoice_data.invoice_amount + ' WHERE supplier_id = ' + invoice_data.supplier_id, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}
})
sql.commit(function(err) {
if (err) {
sql.rollback(function() {
throw err;
});
}else{
result(null,res);
}
});
}
});
});
}
问题是我将 commit
设置为即使第二个查询失败也会执行。它应该在 else
上设置如下:
Invoice.addNewInvoice = function (invoice_data,result){
sql.beginTransaction(function(err){
if (err) { throw err; }
sql.query('INSERT INTO invoice SET ?',invoice_data, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.query('UPDATEEEEE supplier SET supplier_amount = supplier_amount + ' + invoice_data.invoice_amount + ' WHERE supplier_id = ' + invoice_data.supplier_id, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.commit(function(err) {
if (err) {
sql.rollback(function() {
throw err;
});
}else{
result(null,res);
}
});
}
})
}
});
});
}
如果第二个查询失败,它会回滚。
我正在尝试应用交易(beginTransaction
、rollback
和 commit
。但是,如果添加发票的查询(第一个查询)执行成功,我想更新供应商金额(第二个查询)。我打算通过将 UPDATE
更改为 UPDATEEE
在第二个查询中编写错误的语法。我认为这应该 rollback
。我收到查询语法错误消息,但发票添加了(第一个查询成功执行)。
我做错了什么?
Invoice.addNewInvoice = function (invoice_data,result){
sql.beginTransaction(function(err){
if (err) { throw err; }
sql.query('INSERT INTO invoice SET ?',invoice_data, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.query('UPDATEEEEE supplier SET supplier_amount = supplier_amount + ' + invoice_data.invoice_amount + ' WHERE supplier_id = ' + invoice_data.supplier_id, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}
})
sql.commit(function(err) {
if (err) {
sql.rollback(function() {
throw err;
});
}else{
result(null,res);
}
});
}
});
});
}
问题是我将 commit
设置为即使第二个查询失败也会执行。它应该在 else
上设置如下:
Invoice.addNewInvoice = function (invoice_data,result){
sql.beginTransaction(function(err){
if (err) { throw err; }
sql.query('INSERT INTO invoice SET ?',invoice_data, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.query('UPDATEEEEE supplier SET supplier_amount = supplier_amount + ' + invoice_data.invoice_amount + ' WHERE supplier_id = ' + invoice_data.supplier_id, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.commit(function(err) {
if (err) {
sql.rollback(function() {
throw err;
});
}else{
result(null,res);
}
});
}
})
}
});
});
}
如果第二个查询失败,它会回滚。