我有一个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/