我有一个运行 PHP+MySQL 的网站。它是一个多用户系统,大多数 MySQL 表都是基于 MyISAM 的。
在过去的几个小时里,以下情况让我感到困惑:我有两个(并发)用户 A,B。他们俩都会这样做:
- 对表 1 执行读取操作
- 对另一个表 2 执行写操作(仅当先前的读操作将返回不同的结果时,例如 STATUS="OK")
B 向 A 方向延迟了一点。
所以它会像这样发生:
- 用户 A 对表 1 执行读取并看到 STATUS="OK"。
- (用户 A 安排写在表 2 上)
- 用户 B 对表 1 执行读取,仍然看到 STATUS="OK"。
- 用户 A 对表 2 执行写入(导致 STATUS="NOT OK" 不再)
- 用户 B 对表 2 执行写入(假设 STATUS="OK")
如果将读取表 1 和写入表 2 定义为关键部分并以原子方式执行,我想我可以防止这种情况发生。我知道这在带有线程等的 Java 中工作得非常好,但是据我所知,在 PHP 中没有线程通信。
所以我的问题的解决方案一定是和数据库相关的吧?有任何想法吗?
非常感谢!