web-dev-qa-db-ja.com

node.js mysqlプールbeginTransaction&接続

Node.jsのbeginTransactionがプールで複数の接続を使用しているかどうか(トランザクション内に複数のクエリがある場合)、またはコミットされるまで単一の接続のみを使用しているのでしょうか。

8
Edwin Bermejo

トランザクションを複数のデータベース接続で共有することはできません。常に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
                        }
                    });
                }
            });
        }    
    });
});
17
Siddharth Nayar