2017-12-14 2 views

Antwort

1

Eine Transaktion kann nicht von mehreren Datenbankverbindungen gemeinsam genutzt werden und ist immer auf eine einzige Verbindung beschränkt. Der beste Ansatz wäre, eine Verbindung aus dem Pool zu erhalten, bevor Sie die Transaktion starten und nach einem Rollback oder einem Commit freigeben.

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

also, wenn mehrere Abfragen innerhalb einer Transaktion haben, muss ich es erst nach dem Festschreiben oder in einem Rollback freigeben? Ich muss es nicht jeden Erfolg der Abfrage freigeben? Korrigieren Sie mich, wenn ich falsch liege, vielen Dank –

+0

Ja, Sie müssen es nur nach einem Commit oder einem Rollback freigeben, da dies die einzigen Fälle sind, in denen Sie die Transaktion beenden. –

+0

vielen dank –

Verwandte Themen