Node-Mysql 事务回滚不起作用
Posted
技术标签:
【中文标题】Node-Mysql 事务回滚不起作用【英文标题】:Node-Mysql Transaction rollback not working 【发布时间】:2017-07-18 02:36:50 【问题描述】: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)
这个不会回滚。
[我已设置自动提交 = 0]
【问题讨论】:
您的表使用什么引擎?是 InnoDB 还是其他支持事务的引擎? 【参考方案1】:问题 #1
检查您的表正在使用哪个引擎:
show table status;
如果您有问题的表设置为MyISAM
,那么您就发现了问题。 MyISAM 不支持事务,因此无法回滚。您可以更改表格以使用 InnoDB
作为引擎来解决问题:
ALTER TABLE table_name ENGINE = InnoDB;
或在创建表时设置:
CREATE TABLE table_name (
...
) ENGINE = InnoDB;
问题 #2
如果您使用的是池连接,请确保您的回滚查询使用相同的连接。
不保证调用pool.query()
会使用相同的连接,尽管在开发和测试期间可能看起来如此。
请参阅pool.getConnection()
的文档以使其工作。
【讨论】:
以上是关于Node-Mysql 事务回滚不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring @Transactional注解不回滚不起作用无效