【发布时间】:2013-04-07 11:07:20
【问题描述】:
我无法理解的场景:
一个名为 DBserver 的进程有五个线程,每个线程都有一个与 Mysql 数据库的连接。每次我们要执行一条sql,我们将它发送给DBserver,然后DBserver会选择一个线程来执行。现在来了两个sql,分别称为sqlA和sqlB,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已经上线了,没有出现任何错误,我不知道为什么。非常感谢!
【问题讨论】:
-
数据库服务器抛出错误的任何原因?任何方式 last update 语句都会更新数据
-
乍一看,这看起来不像是关于 MySQL 的问题,也不是关于您正在使用的任何数据库驱动程序/库的问题。很明显,这一行的货币价值应该是 10 或 100,并且任何排序要求都必须在您的 (pthreads) 代码中实现。如果您在现有的“金钱”余额中添加 10 和 100,那么这可能与 ACID 合规性(对于依赖于存储引擎的 MySQL)和您选择的连接库的线程安全有关。
-
@tonyli 你的问题得到解答了吗?
标签: mysql database pthreads threadpool