代码之家  ›  专栏  ›  技术社区  ›  Cocest

Node.js MySQL模块中的MySQL自定义变量

  •  0
  • Cocest  · 技术社区  · 7 年前

    我想知道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!');
                    });
                });
            });
        });
    });
    

    您可能会想,为什么不在第三个查询中使用第二个查询的结果呢。事务函数封装在实用程序函数中,该实用程序函数接受查询作为要使用事务执行的参数。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Cocest    7 年前

    运行代码示例后,它失败了,不是因为第二个查询中的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!');
                    });
                });
            });
        });
    });