nodejs是否将单个函数中的单独数据库操作作为原子操作?

Does nodejs make separate database operations in a single function as atomic?

我一直在尝试在节点 js 上编写一些 运行 的数据库查询,我想到了这个。我能闻到我误会了什么,但无法弄清楚它是什么。

如果节点是单线程的,那么这意味着所有函数调用运行一个接一个。如果有多个客户端访问同一个节点服务器,仍然会出现请求先排队的竞争,但是只要每个请求都一个一个处理,这不是让所有的数据库操作都执行了吗在单个请求中 atomic?

例如,假设我想 1) 计算与 table 中某个值匹配的列数,以及 2) 如果数字超过 10,则插入一个新行。(这可能是可能的在一个 SQL 查询中执行此操作,但假设我 运行 它们分开。这是一个愚蠢的例子,但我希望你明白了。)我会使用事务来确保匹配列不会意外更改。现在,我正在考虑编写一个 运行 没有事务的两个查询的函数。这能保证在节点上正常工作吗?

我想你想 运行 你的第一个调用,一个计数,然后你想在上一个调用的回调中执行一个插入。

由于 js 和 nodejs 的性质,一旦您等待对第一次调用的响应,一旦它返回并进入事件循环(因此,计数消失了,您已经有了即时结果),在等待服务时,其他一切都可能发生......甚至可以在其他地方提供另一个插入,为什么不呢(让我说,你正在服务用户请求,所以由于请求的插入另一个用户,而不是执行计数的用户)。

也就是说,第二个用户的插入可以在第一个用户计数之后发送的插入之前提供,这意味着绑定到计数的插入正在处理错误的预期数据集大小。

这只是您可能遇到的其中一种情况,但应该足以解决您的疑惑。