mysql - 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 查询的顺序?
解决方案
是的,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 个单独的连接。
推荐阅读
- python-3.x - Python新手:使用字典中的值打印列表
- kubernetes - metrics-server 和 prometheus-adapter 等metrics provider如何将自己的api注册到kubernetes apiserver
- python - 如何根据数值列值将 Pandas 数据框中的一行转换为多行?
- windows - Why is the syntax of command FOR incorrect?
- c++ - how to reduce compile time: in case of including an untouched header file
- layout - 将按钮添加到布局,它不会显示
- api - 您可以部署表格插件并将其作为管理员或服务帐户运行吗?
- email - 邮件不是在命令行上使用 mutt 发送的
- excel - How to customize icons for conditions
- angular - 如何使用 web api 或 angular 更好地搜索?