node.js mysql 池 beginTransaction & 连接

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 错了,非常感谢 是的,您只需要在提交或回滚后释放它,因为这些是您结束事务的唯一情况。 这对我很有帮助。请对此给予更多支持。

以上是关于node.js mysql 池 beginTransaction & 连接的主要内容,如果未能解决你的问题,请参考以下文章

node.js mysql 池 beginTransaction & 连接

如何在 Node js 中承诺一个 mysql 池连接?

Node.js如何使用MySQL的连接池实例

使用池的node.js mysql中的错误处理和丢失连接

Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

node.js的generic-pool与mysql结合,mysql连接池