让我们看看这个例子
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查询的顺序?
答案 0 :(得分:1)
是的,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个单独的连接。