mysql - node.js mysql 池 beginTransaction & 连接

标签 mysql node.js express node-mysql

我一直想知道 node.js mysql 中的 beginTransaction 是否在一个池中使用多个连接(如果我在事务中有多个查询),或者它是否只使用一个连接直到它被提交?

最佳答案

一个事务不能被多个数据库连接共享并且总是被限制在一个连接上。最好的方法是在开始事务之前从池中获取连接,并在回滚或提交后释放它。

pool.getConnection(function(err, connection) {
    connection.beginTransaction(function(err) {
        if (err) {                  //Transaction Error (Rollback and release connection)
            connection.rollback(function() {
                connection.release();
                //Failure
            });
        } else {
            connection.query('INSERT INTO X SET ?', [X], function(err, results) {
                if (err) {          //Query Error (Rollback and release connection)
                    connection.rollback(function() {
                        connection.release();
                        //Failure
                    });
                } else {
                    connection.commit(function(err) {
                        if (err) {
                            connection.rollback(function() {
                                connection.release();
                                //Failure
                            });
                        } else {
                            connection.release();
                            //Success
                        }
                    });
                }
            });
        }    
    });
});

关于mysql - node.js mysql 池 beginTransaction & 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47809269/

相关文章:

MySQL SELECT "LIKE"参数无法正常工作

php - 我无法在循环之外获取查询的值

javascript - Nodejs 和 Mongoose 数据获取

javascript - NodeJS 中是否有任何简单的方法可以将多部分/表单数据转换为数组?

javascript - 发送新的 HTML 页面,并在原始页面发出 POST 请求后向其发出 GET 请求

node.js - Express.js index.js 404(未找到)

node.js - 使用 angular.js 时出现 Injector.modulerr 错误

mysql - InnoDB 文档 支持事务、行级锁定和外键

javascript - 如果未找到带有选择器的元素,Puppeteer page.$eval 会抛出错误

mysql - 崩溃后自动修复数据库表,或者切换到 InnoDB