Mysql
 sql >> Datenbank >  >> RDS >> Mysql

node.js MySQL-Pool beginTransaction &connection

Eine Transaktion kann nicht von mehreren Datenbankverbindungen gemeinsam genutzt werden und ist immer auf eine einzelne Verbindung beschränkt. Der beste Ansatz wäre, eine Verbindung aus dem Pool zu erwerben, bevor Sie mit der Transaktion beginnen, und sie nach einem Rollback oder einem Commit freizugeben.

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