首页 > 解决方案 > Node.js MySQL 连接、查询顺序和事件循环

问题描述

让我们看看这个例子

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/ node 包是否mysql2保证 MySQL 查询的顺序?

标签: mysqlnode.js

解决方案


是的,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”)。在“查询 2”完成后,它的回调函数被调用,结果“查询 4”被添加到队列中。

这更多是协议属性,而不仅仅是驱动程序的功能。Mysql 协议仅允许您仅在当前命令完全完成后才发送下一个命令,并且在某种程度上是“半双工”。实际并行运行两个 sql 查询的唯一方法是打开 2 个单独的连接。


推荐阅读