繁体   English   中英

Node.js MySQL查询执行流程

[英]Node.js MySQL query execution flow

如果我有一个MySQL查询,该查询返回的值将在WHERE子句中再次使用,那么它将与Node.js的异步执行流程一起使用吗?

通常情况可能是这样的:

SELECT
customerId FROM Customers
WHERE customerName=nikolas

然后将结果存储如下:

var customerId = customerId

并在另一个查询中重用:

SELECT
orderId FROM Orders
WHERE customerId=customerId

这会获取我在第一个查询中返回的客户NikolasorderId吗?

书面查询会按顺序运行吗?

这实际上取决于您使用的模块。 最常用的驱动程序之一node-mysql是异步的,因此代码不会顺序运行。 相反,您必须使用回调:

var query1 = 'SELECT customerId FROM Customers WHERE customerName = nikolas';
var query2 = 'SELECT orderId FROM Orders WHERE customerId = ';

connection.connect();
connection.query(query1, function(err, rows, fields) {
  var customerId = rows[0].customerId;
  connection.query(query2 + customerId, function(err, rows, fields) {
    connection.end();
    // results are here
  });
});

在Node.js中,您通常要编写异步代码。 某个地方可能有一个同步的MySQL驱动程序模块,但是大多数情况下,他们都不希望通过同步数据库调用来阻塞其进程。

在@hexacyanide编写的代码中。 在第一个查询运行之前,第二个查询将不会运行,因为代码正在等待第一个查询的响应。 这样可以回答您对顺序性的疑问。 而且您也不需要为此使用两个查询。 您可以简单地将两个表连接起来并在单个查询中获得结果。 像这样:

SELECT orders.orderId 
       FROM Orders orders 
       JOIN Customers customers 
       ON orders.customerId = customers.customerId
       WHERE customers.customerName='Nikolas'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM