如果我有一个MySQL查询返回一个将在WHERE
子句中再次使用的值,那么这将与Node.js的异步执行流程一起使用吗?
通常情况可能如此:
SELECT
customerId FROM Customers
WHERE customerName=nikolas
然后结果将存储如下:
var customerId = customerId
并在另一个查询中重用:
SELECT
orderId FROM Orders
WHERE customerId=customerId
这会抓住我在第一个查询中返回的客户orderId
的Nikolas
吗?
写入的查询会按顺序运行吗
这实际上取决于您使用的模块。最常用的驱动程序之一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'