Reputation: 1204
Let's see this example
conn.query('SET @v = 1;', (err) => {
conn.query('SELECT @v;', (err, res) => {
// res contains @v = 1 or 2 ?
});
});
conn.query('SET @v = 2;', (err) => {
conn.query('SELECT @v;', (err, res) => {
// res contains @v = 1 or 2 ?
});
});
Does mysql
/mysql2
node packages guarantee MySQL queries order or not?
Upvotes: 1
Views: 343
Reputation: 25466
Yes, both mysql and mysql2 preserve the order. In following example order of execution is indicated by number
conn.query('query 1', (err) => {
conn.query('query 3', (err, res) => {
});
});
conn.query('query 2', (err) => {
conn.query('query 4', (err, res) => {
});
});
First, "query 1" and "query 2" are placed to command queue. Then after "query 1" is complete "query 3" is added to queue ( now it's "query 2, query 3" ). After "query 2" is complete it's callback function is called and as a result "query 4" is added to queue.
This is more of a protocol property, not just driver's feature. Mysql protocol only allows you to send next command only after current command if fully complete, and is in a way "half duplex". The only way to actually run two sql queries in parallel is to open 2 separate connections.
Upvotes: 2