mysql-transactions v0.0.3
node-mysql-transactions
dependencies
npm install mysql
install
npm install mysql-transactions
tutorial
Seeing as how you're viewing a module named mysql-transactions
I'm going to assume you understand the little bits and
jump right into coding a simple demo. Cool? Cool.
the schema
Before we get started this is the structure we're going to be using for this demo.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(40) NOT NULL
);
game time
var async = require('async');
var transactions = require('mysql-transactions')({
user: 'hamburglar',
password: 'omnomnomnomnom',
database: 'playhouse'
});
As you can see, we're using the async
module as well. But the section to note is require('mysql-transactions')({ ... });
.
Here we must pass in our connection
options (again?). These options are the same ones used in your non-transactional queries
i.e. the options/string supplied to mysql.createConnection.
async.series(
[
function(done) {
transactions.begin(done);
},
Okay, so now that we have our connection options ready we need to kick off the transactions process which we do by
calling transactions.begin(done)
. Note that we passed in done
to continue the async
flow.
function(done) {
transactions.query('insert into users set ?', { name: 'John Smith' }, function(err, result) {
if (err) return done(err);
done(null, result.affectedRows ? true : false);
});
}
With the transactions
process open we can query the database like
normal.
],
function(err, results) {
if (err) {
transactions.rollback();
return console.log(err);
}
transactions.commit(function(err, result) {
if (err) return console.log(err);
console.log('done');
});
}
);
The last step in the process is to either commit
or rollback
the transactions
. One must be called to close the
connection
. While this example shows transactions.commit(function...)
, it is not necessary to provide a function to
commit
/rollback
or begin
for that matter.
full demo
var async = require('async');
var transactions = require('mysql-transactions')({
user: 'hamburglar',
password: 'omnomnomnomnom',
database: 'playhouse'
});
async.series(
[
function(done) {
transactions.begin(done);
},
function(done) {
transactions.query('insert into users set ?', { name: 'John Smith' }, function(err, result) {
if (err) return done(err);
done(null, result.affectedRows ? true : false);
});
}
],
function(err, results) {
if (err) {
transactions.rollback();
return console.log(err);
}
transactions.commit(function(err, result) {
if (err) return console.log(err);
console.log('done');
});
}
);