Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?
node.js 中使用 sequelize 执行事务回滚时遭遇问题
在使用 sequelize 进行事务处理时,您遇到了回滚失败的问题,尽管日志显示回滚已执行,但插入的记录仍存在。
问题分析
根据您提供的代码,您已正确设置了事务 (t) 并将其传递给 create() 方法。但是,存在一个关键问题:
表存储引擎
您未指定表存储引擎。默认情况下,mysql 使用 myisam 存储引擎,不支持事务。要启用事务,需要将表存储引擎更改为 innodb:
alter table groups engine=innodb;
修改后的代码
修改后的代码如下:
// 创建群组 exports.createGroup = async function (user_id, name, img_url) { // 创建事务 const t = await sequelize.transaction(); try { // 创建群组记录 let result = await models(sequelize).groups.create({ user_id: user_id, name: name, img_url: img_url },{ transaction: t }); // 回滚事务 await t.rollback(); console.log('回滚'); return func.resJsonSuccess(result, '建群成功!'); } catch (error) { return func.resJsonError([], error.message); } }
解决方案
将表存储引擎更改为 innodb 即可解决此问题。重新运行代码,您应该可以成功回滚插入的操作。
以上就是Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?的详细内容,更多请关注其它相关文章!