1

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?

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you. It means, that both 'SELECT @v;` from the example in the initial post return 2 as result

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.