Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 抛出新错误时,sequelize回滚不起作用_Mysql_Node.js_Database_Sequelize.js_Rollback - Fatal编程技术网

Mysql 抛出新错误时,sequelize回滚不起作用

Mysql 抛出新错误时,sequelize回滚不起作用,mysql,node.js,database,sequelize.js,rollback,Mysql,Node.js,Database,Sequelize.js,Rollback,我正在尝试一次更新三个表。如果其中一个表没有更新,我想回滚它。我尝试在MySQL数据库中手动执行查询,效果很好。但是在代码中,它不能正常工作并且不能回滚 这是密码 return sequelize.transaction({ autocommit: false }, function(t) { return models.VaccinationCenter.update({ email }, { where: { i

我正在尝试一次更新三个表。如果其中一个表没有更新,我想回滚它。我尝试在MySQL数据库中手动执行查询,效果很好。但是在代码中,它不能正常工作并且不能回滚

这是密码

return sequelize.transaction({
    autocommit: false
}, function(t) {
    return models.VaccinationCenter.update({
        email
    }, {
        where: {
            id: vacId
        }
    }, {
        transaction: t
    }).then(function(VaccinationCenter) {
        //console.log('---------------VaccinationCenter--------------------------------',VaccinationCenter)
        if (VaccinationCenter[0] === 0) {
            throw new Error();
            //console.log('VaccinationCenter--------------error')
        } else {
            return models.Person.update({
                    email
                }, {
                    where: {
                        email: prevEmail
                    }
                }, {
                    transaction: t
                })
                .then(function(Person) {
                    //console.log('---------------Person--------------------------------',Person);
                    if (Person[0] === 0) {
                        //console.log('Person--------------error');
                        throw new Error();
                    } else {
                        return models.User.update({
                                email
                            }, {
                                where: {
                                    email: prevEmail
                                }
                            }, {
                                transaction: t
                            })
                            .then(function(User) {
                                if (User[0] === 0) {
                                    //console.log('User--------------error');
                                    throw new Error();
                                } else {
                                    callback({
                                        statusCode: Constants.errorStatus.SUCCESS,
                                        body: {
                                            isValidemail: true
                                        }
                                    });
                                }
                                //console.log('---------------User--------------------------------',User)
                            });
                    }

                });
        }

    });

}).then(result => {
    callback({
        statusCode: Constants.errorStatus.SUCCESS,
        body: {
            isValidemail: true
        }
    });

}).catch(error => {
    callback({
        statusCode: Constants.errorStatus.BAD_REQUEST,
        body: {
            isValidEmail: false
        }
    });
});
这是运行此代码时的控制台

Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): START TRANSACTION;
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): SET autocommit = 0;
Executing (default): UPDATE `VaccinationCenters` SET `email`='devakadabare1+12@gmail.com',`updatedAt`='2020-03-03 10:06:14' WHERE `id` = 60
Executing (default): UPDATE `People` SET `email`='devakadabare1+12@gmail.com',`updatedAt`='2020-03-03 10:06:14' WHERE `email` = 'devakadabare1+11@gmail.com'
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): ROLLBACK;

使用托管事务时,绝不应手动提交或回滚事务。如果所有查询都成功,但仍要回滚事务(例如,由于验证失败),则应抛出一个错误以断开并拒绝该链。例如:

return sequelize.transaction(function (t) {
  return User.create({
    firstName: 'Abraham',
    lastName: 'Lincoln'
  }, {transaction: t}).then(function (user) {
    // Woops, the query was successful but we still want to roll back!
    throw new Error();
  });
});

有关更多详细信息,请检查

在将此代码替换为where:{email:preveemail}}、{transaction:t}时是否有效,交易记录:t