我有一个MySQL表

mysql> select * from test;
+----+--------+
| id | status |
+----+--------+
|  1 |  unread     |
+----+--------+


假设我正在从彼此为H.A的机器m1,m2,m3,m4中读取此应用程序。

我想要的是:

如果status == unread
那么m1,m2,m3,m4中的任何一个(但只有一个)可以提取该行,并将其状态更改为processing并进行进一步处理。

但是我面临的问题是多个脏读,因为m1,m2,m3,m4同时读取status = unread,并且它们同时将状态更改为processing并开始处理它。

如何确保在m1,m2,m3,m4中仅一次读取一行?

最佳答案

不确定为什么要使用java和多线程,因为您正在从不同的机器访问数据库,但是通常SELECT ... FOR UPDATE是您大概需要的。

关于java - 防止在mysql中脏读,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45703936/

10-09 20:00