Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
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 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注主机宝贝公众号,带你了解更多关于的知识点!