Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MySQL在nodeJs服务器上实现多个用户的安全读写操作,以避免不一致状态?_Mysql_Node.js_Typescript_Thread Safety_Consistency - Fatal编程技术网

如何使用MySQL在nodeJs服务器上实现多个用户的安全读写操作,以避免不一致状态?

如何使用MySQL在nodeJs服务器上实现多个用户的安全读写操作,以避免不一致状态?,mysql,node.js,typescript,thread-safety,consistency,Mysql,Node.js,Typescript,Thread Safety,Consistency,我知道nodeJs架构是基于单线程的,它是事件驱动的模型。事实上,直接在nodeJs应用程序上,我们不必关心对同一变量的并发写入和读取(如果我错了,请告诉我)。但我现在想知道,在与nodeJs应用程序交换的数据库行(MySQL)上的并发访问情况如何。那么,我如何在我的应用程序上实现一致性状态呢。 PS:一些代码示例会很好。 谢谢 如何使用MySQL作为数据库在nodeJs服务器上实现多个用户的安全读写操作(例如基本增量a值),以避免不一致状态?数据库一致性是关于RDBMS如何实现的,它与node

我知道nodeJs架构是基于单线程的,它是事件驱动的模型。事实上,直接在nodeJs应用程序上,我们不必关心对同一变量的并发写入和读取(如果我错了,请告诉我)。但我现在想知道,在与nodeJs应用程序交换的数据库行(MySQL)上的并发访问情况如何。那么,我如何在我的应用程序上实现一致性状态呢。 PS:一些代码示例会很好。 谢谢


如何使用MySQL作为数据库在nodeJs服务器上实现多个用户的安全读写操作(例如基本增量a值),以避免不一致状态?

数据库一致性是关于RDBMS如何实现的,它与node.js程序中的并发性是不同的

如果要增加数据库表中某一行的值,可以使用此查询对数据库进行查询

 UPDATE statistics SET counter = counter + 1 WHERE item = 'someItemId';
您需要从node.js MySQL API中相应的方法调用发出查询

即使许多不同的node.js(或Java、或php或其他)程序在数据库上同时运行这种查询,结果仍然是一致的。RDBMS隐式地将此类查询包装在一个数据库中,确保它在启动后运行到完成。这就是RDBMS一致性的意义所在


ACID的详细解释远远超出了堆栈溢出回答的范围。

“这与node.js程序中的并发性是不同的。”很好地重用您以前用于插入的MySQL连接,例如从node.js MySQL库连接池插入的MySQL连接,仍然会保持在那里
LAST\u insert\u ID()
如果您可以这样调用它,它也可能导致不一致的并发状态。。。我不太明白你的意思。在对连接执行插入操作之前引用
LAST\u INSERT\u ID()
相当于访问旧式编程语言中的单元化内存:这是一个完全可以避免的程序员错误。“我不确定我是否理解您的观点”想象一下,如果您创建了一个连接池,您可以插入连接,但从不关闭连接。。因此,连接在MySQL服务器上保持活动状态。。在理论MySQL中,连接通过
LAST\u INSERT\u ID()
保持活动状态。。稍后您将再次重用该连接,
LAST\u INSERT\u ID()
应该仍然存在于该连接中。“在对连接进行插入之前引用LAST\u INSERT\u ID(),相当于访问旧式编程语言中的单元化内存:这是一个完全可以避免的程序员错误。”我同意这样一个观点:一个问题是,如果脱离连接池模型ACID是通过事务实现的,那么它不是统一的内存。就用它吧。另一个问题是编写代码,谁实现ACID没有事务。例如尝试不使用更新中选择的数据。