mysql - nodeJS mysql库如何串行执行查询

标签 mysql sql node.js database transactions

例如,如果我有如下代码,它会串行执行还是并行执行?

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

connection.connect();

let transaction = 'START TRANSACTION; //DO SOMETHING COMMIT;'

connection.query(transaction, function (error, results, fields) {
  if (error) throw error;
  console.log(results);
});

connection.query(transaction, function (error, results, fields) {
  if (error) throw error;
  console.log(results);
});

connection.end();

它确实说

The MySQL protocol is sequential, this means that you need multiple connections to execute queries in parallel. You can use a Pool to manage connections, one simple approach is to create one connection per incoming http request.

在网站上,但我想知道“顺序”是否意味着查询按顺序发送到数据库但“并行”执行,或者是否意味着在第一个查询完全执行之前是否永远不会发送下一个查询(这就是我的意思是串行)。

如果它们在数据库中并行“执行”,我如何确保每个查询都作为单独的事务提供服务?我这样问是因为我必须处理多个查询(可能同时请求服务器)以在数据库中串行执行。当然,这在多个连接下是可能的(使用不同终端实例与 mysql 服务器的多个连接),但是我如何使用这个 mysql nodejs 库模拟该环境?

我无法使用 promise 或回调,因为我不知道将执行多少个查询或何时执行。每次从客户端向服务器进行查询时,我只能调用 connection.query

最佳答案

您可以利用 javascript Promise 来解决您的问题。您可以查看https://github.com/tuhinpaul/syp-model/wiki/Programmatic-(Dynamic)-Chaining-and-Recursive-Functions-with-JavaScript-or-Node.js-Promises了解如何串行执行任务。

syp-model包提供了按顺序执行查询的能力,尽管此时文档需要更多工作;而且它还没有集成的事务支持。

有帮助吗?

关于mysql - nodeJS mysql库如何串行执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102036/

相关文章:

mysql - 使用 CURL 和 shell 脚本验证 mysql 数据库中 URL 的状态

php - 未从 Android 应用程序将正确的西里尔文条目插入 MySQL 数据库

java sql 插入时间戳 java.sql.SQLSyntaxErrorException

javascript - 搜索数据库 | NodeJS、Express、HTML

node.js - 使用 Passport 创建用户

c++ - C++ ubuntu 中的文件访问

Mysql 选择 1 个月前保存的记录,如果没有找到,则选择较旧的记录

mysql - sql - 内部连接执行交叉连接

javascript - 有没有办法让js逐行执行这个脚本

python - django 中 user_id_id 的默认值无效