node.js mysql模块中的mysql自定义变量

5sxhfpxr  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(287)

我想知道mysql用户定义变量是否可以使用node.js mysql模块工作。下面的示例突出显示了我希望使用事务实现的目标:

connection.beginTransaction(err => {
    if (err) { throw err; }

    connection.query('INSERT INTO user SET = ?', {id: 12, username: 'name'}, (err, results) => {
        if (err) {
            return connection.rollback(function() {
                throw error;
            });
        }

        connection.query('SELECT @user_id:=userID FROM user WHERE username = ?', ['name'], (err, results) => {
            if (err) {
                return connection.rollback(function() {
                    throw error;
                });
            }

            connection.query('INSERT INTO authentication SET `userID` = @user_id, ?', {password: 'userpassword'}, (err, results) => {
                if (err) {
                    return connection.rollback(function() {
                        throw error;
                    });
                }

                connection.commit(err => {
                    if (err) {
                        return connection.rollback(function() {
                            throw err;
                        });
                    }

                    console.log('success!');
                });
            });
        });
    });
});

您可能会想,为什么不在第三个查询中使用第二个查询的结果呢。transaction函数被 Package 在一个实用函数中,该实用函数接受查询作为要使用transaction执行的参数。
如果上面的代码示例不起作用,请提供一种简洁的方法来实现这一点。谢谢您。

bqf10yzr

bqf10yzr1#

在运行代码示例之后,失败不是因为第二个查询中的mysql变量。这个代码示例对我很有用:

connection.beginTransaction(err => {
    if (err) { throw err; }

    connection.query('INSERT INTO user (id, username) VALUES(?, ?)', [12, 'name'], (err, results) => {
        if (err) {
            return connection.rollback(function() {
               throw error;
            });
        }

        connection.query('SELECT @user_id:=userID FROM user WHERE username = ?', ['name'], (err, results) => {
            if (err) {
                return connection.rollback(function() {
                    throw error;
                });
            }

            connection.query('INSERT INTO authentication (id, password) VALUES (@user_id, ?), ['userpassword'], (err, results) => {
                if (err) {
                    return connection.rollback(function() {
                        throw error;
                    });
                }

                connection.commit(err => {
                    if (err) {
                        return connection.rollback(function() {
                            throw err;
                        });
                    }

                    console.log('success!');
                });
            });
        });
    });
});

相关问题