2017-12-14 6 views
0

おはようございます!私は私のプール内でnodejs mysql beginTransactionが複数の接続を使用しているか(私のトランザクション内に複数のクエリがある場合)、それがコミットされるまでは1つの接続しか使用しないのだろうか?node.js mysql pool beginトランザクションと接続

答えて

1

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

トランザクション内で複数のクエリがある場合は、コミットまたはロールバックした後にのみ解放する必要がありますか?私はそれを解放する必要はありませんクエリのすべての成功?私が間違っている場合は私に訂正してください。ありがとうございます。 –

+0

はい、トランザクションを終了する唯一のケースであるため、コミットまたはロールバック後に解放する必要があります。 –

+0

ありがとう –

関連する問題