我无法理解的场景:可以多个线程操作相同的数据库吗?
称为DBserver的进程有五个线程,每个线程都有一个连接到Mysql数据库。每次我们想要执行一个sql,我们将它发送到DBserver,然后DBserver将选择一个线程来执行。现在来了两个叫做sqlA和sqlB的sql,sqlA来自sqlB之前, 但由于DBserver使用多线程,它不能保证sqlA在sqlB之前执行。 如果sqlB真的在sqlA之前执行,在我看来,会发生错误。
例如:
sqlA:update bankTable set money = 10 where id = 10001;
sqlB:update bankTable set money = 100 where id = 10001;
如果SQLB sqlA之前执行,这笔钱将在10最后,这应该是100 但这DBSERVER已经上线,并没有发生任何错误,我不不知道为什么。非常感谢你!
数据库服务器抛出错误的任何原因?任何方式上次更新语句将更新数据 – shola
乍一看,这看起来不像是关于MySQL的问题,也不是关于你使用的任何数据库驱动程序/库。很显然,这一行的金钱价值应该是10或100,并且任何排序要求都必须在您的(pthreads)代码中实现。 如果您将* 10和100添加到现有的“金钱”余额,那么它可能是ACID合规性问题(对于依赖于存储引擎的MySQL)和您选择的连接库的线程安全性。 –
@tonyli是你的问题回答? –