gpt4 book ai didi

mysql - Node-Mysql 事务回滚不起作用

转载 作者:行者123 更新时间:2023-11-29 03:22:09 24 4
gpt4 key购买 nike

js 还有mysql。我在交易方面遇到了麻烦。

在下面的函数中,我完全按照他们在这里所说的做 https://github.com/mysqljs/mysql#transactions .但它不起作用:|

function insertMemoTransaction(){
pool.getConnection(function(error, connection){
if(error){
alert("Somthing is wrong with your connection");
}
connection.beginTransaction(function(error){
if(error) { throw error; }
var idfield = scope.find('input[name="Party_Id"]');
var Party_Id;
if(idfield.val() == '-1'){
var newParty = {
// An object
};
connection.query("INSERT INTO ?? SET ?",['Party', newParty],function(error, result, fields){
if(error){
return connection.rollback(function(){
throw error;
});
}
else{
Party_Id = result.insertId;
var infoObj = {
// an Object
}


connection.query('INSERT INTO ?? SET ?', ['Memo_Info', infoObj], function(error, result, fields){
if(error){
return connection.rollback(function(){
throw error;
});
}
});
}
});
}
else{
Party_Id = idfield.val();
var infoObj = {
// an Object
}

connection.query('INSERT INTO ?? SET ?', ['Memo_Info', infoObj], function(error, result, fields){
if(error){
return connection.rollback(function(){
throw error;
});
}
});
}
connection.commit(function(error) {
if (error) {
return connection.rollback(function() {
throw error;
});
}
console.log('Transaction Complete.');
connection.release();
});
});
});
}

我写这段代码是为了在node-mysql中做一个事务,但是如果,

 connection.query('INSERT INTO ?? SET ?', ['Memo_Info', infoObj], function(error, result, fields)

这个查询不运行 不知何故,影响

connection.query("INSERT INTO ?? SET ?",['Party', newParty],function(error, result, fields)

这个不会回滚。

[我设置了 autocommit = 0]

最佳答案

陷阱 #1

检查您的表使用的引擎:

show table status;

如果您的表设置为 MyISAM,您就发现了问题所在。 MyISAM 不支持事务,因此无法回滚。您可以更改表以使用 InnoDB 作为解决问题的引擎:

ALTER TABLE table_name ENGINE = InnoDB;

或者在建表的时候设置:

CREATE TABLE table_name (
...
) ENGINE = InnoDB;


陷阱#2

如果您使用的是池连接,请确保您的回滚查询使用相同的连接。

调用 pool.query() 并不能保证使用相同的连接,尽管在开发和测试期间可能看起来是这样。

请参阅 pool.getConnection() 的文档使其发挥作用。

关于mysql - Node-Mysql 事务回滚不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486471/

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