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?
解决方案
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.