我遇到MySQL的SELECT问题.. FOR UPDATE,这是我试图运行的查询:
SELECT * FROM tableName WHERE HostName='UnknownHost'
ORDER BY UpdateTimestamp asc limit 1 FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
在此之后,相关的线程将执行UPDATE并更改HostName,然后它应该解锁该行.
我正在运行一个多线程java应用程序,所以3个线程正在运行这个SQL语句,但是当线程1运行它时,它不会从线程2和3锁定其结果.因此线程2和3得到相同的结果,他们可以更新同一行.
每个线程也都有自己的mysql连接.
我正在使用Innodb,事务隔离= READ-COMMITTED,并且在执行select for update之前自动提交已关闭
我可能会错过什么吗?或许还有更好的解决方案?非常感谢.
代码:
public BasicJDBCDemo()
{
Le_Thread newThread1=new Le_Thread();
Le_Thread newThread2=new Le_Thread();
newThread1.start();
newThread2.start();
}
Run Code Online (Sandbox Code Playgroud)
线程:
class Le_Thread extends Thread
{
public void run()
{
tring name = Thread.currentThread().getName();
System.out.println( name+": Debut.");
long oid=Util.doSelectLockTest(name);
Util.doUpdateTest(oid,name);
}
}
Run Code Online (Sandbox Code Playgroud)
选择 :
public static long doSelectLockTest(String threadName)
{
System.out.println("[OUTPUT FROM SELECT Lock ]...threadName="+threadName);
PreparedStatement pst = null;
ResultSet rs=null;
Connection …Run Code Online (Sandbox Code Playgroud)