【问题标题】:MySQL user-defined variables in Node.js mysql moduleNode.js mysql 模块中的 MySQL 用户定义变量
【发布时间】:2019-01-12 22:02:11
【问题描述】:

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

您可能想知道,为什么不在第三个查询中使用第二个查询的结果。事务函数被包装在一个实用函数中,该函数接受查询作为要使用事务执行的参数。

如果上面的代码示例不起作用,请有一种简洁的方法来实现这一点。谢谢。

【问题讨论】:

  • 如果你有代码为什么不自己试试看呢?
  • @Shadow 这是一个很好的观点,但我现在没有足够的时间来测试代码。我想知道这是否有助于我决定如何构建我的数据库。
  • 测试代码不是奢侈品。这是必需品。我们绝对无法测试您的代码,因为我们错过了很多上下文和数据库结构。此外,我看不到上述代码的正确性对数据库结构有何影响。
  • @Shadow 感谢您的努力。正在设置运行代码示例的环境。

标签: mysql node.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 2013-04-25
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多