这是从Node.js运行的多查询
SET @var = 123;
INSERT INTO `table` VALUES ('test', @var)
ON DUPLICATE KEY UPDATE
column = @var := IF(column < @var, @var, column + @var);
SELECT @var column;
并发查询是否有任何警告?
如果多个线程共享同一连接(会话)?
答案 0 :(得分:1)
永远不要在多个线程上共享一个MySQL连接。您将导致比赛条件。每个线程都可以(并且不可避免地会)接收在另一个线程上启动的查询的结果,这是无法预料的。最终,每个线程都会收到其想要的数据包的难以理解的子集,再加上不需要的额外数据包。
此外,您提到了多重查询,但是您也不应该使用它。每个调用执行一条语句。如果您的网络性能接近合理水平,则使用多查询没有任何优势。
您可以放心,只要您在同一连接上进行设置,或者像在示例中显示的那样读取用户定义的变量,就可以在单独调用query()时可靠。
关于node.js,默认情况下,每个请求只允许一个语句。您可以根据需要启用multipleStatements
(请参见node-mysql multiple statement in one query)。
另一种方法是一次运行一个语句,然后串行运行它们。您可以通过在前一条语句的回调函数中运行下一条语句来确保下一条语句等待上一条语句完成。 OP的问题node-mysql multiple statement in one query中显示了一个示例。