登录
首页 >  数据库 >  MySQL

Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?

时间:2024-10-31 17:39:54 443浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《Sequelize 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

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 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>