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

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 事务回滚失败,日志显示已执行但插入的记录仍存在,问题出在哪?的详细内容,更多请关注其它相关文章!