node.js mysql连接,查询顺序和事件循环

bfhwhh0e  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(375)

让我们看看这个例子

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

mysql / mysql2 节点包是否保证mysql查询有序?

euoag5mw

euoag5mw1#

是的,mysql和mysql2都保持了顺序。在下面的示例中,执行顺序由数字表示

conn.query('query 1', (err) => {
    conn.query('query 3', (err, res) => {
    });
});

conn.query('query 2', (err) => {
    conn.query('query 4', (err, res) => {
    });
});

首先,“查询1”和“查询2”被放置到命令队列中。然后在“查询1”完成后,将“查询3”添加到队列中(现在是“查询2,查询3”)。在“query2”完成后,它的回调函数被调用,结果“query4”被添加到队列中。
这更多的是一个协议属性,而不仅仅是驱动程序的特性。mysql协议只允许在当前命令完全完成后才发送下一个命令,并且是“半双工”的。实际并行运行两个sql查询的唯一方法是打开两个单独的连接。

相关问题