【问题标题】:node.js mysql pool beginTransaction & connectionnode.js mysql 池 beginTransaction & 连接
【发布时间】:2018-05-28 07:14:40
【问题描述】:

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

【问题讨论】:

    标签: mysql node.js express node-mysql


    【解决方案1】:

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

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

    【讨论】:

    • 所以如果一个事务中有多个查询,我需要在提交或回滚后释放它吗?我不t need to release it every success of query? correct me if im 错了,非常感谢
    • 是的,您只需要在提交或回滚后释放它,因为这些是您结束事务的唯一情况。
    • 这对我很有帮助。请对此给予更多支持。
    猜你喜欢
    • 2013-09-01
    • 2013-10-01
    • 2018-07-15
    • 2016-06-25
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多