node.js mysql pool beginTransaction&连接

时间:2017-12-14 08:52:21

标签: mysql node.js express node-mysql

大家好!我一直想知道nodejs mysql beginTransaction是否在我的池中使用多个连接(如果我的事务中有多个查询),或者只是在提交之前只使用一个连接?

1 个答案:

答案 0 :(得分:9)

多个数据库连接无法共享事务始终仅限于单个连接。最好的方法是在开始事务之前从池中获取连接,并在回滚或提交后释放它。

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
                        }
                    });
                }
            });
        }    
    });
});