MYSQL SELECT ... FOR UPDATE不工作?

时间:2010-11-30 10:40:32

标签: java sql mysql select jdbc

我遇到MySQL的SELECT问题.. FOR UPDATE,这是我试图运行的查询:

SQL = "SELECT * " +
      "FROM " + TableName + " " + 
      "WHERE out_status IN ("+outSStatus+") AND queued <= NOW() " +
      "ORDER BY out_status, id_queue ASC "+ limitSql+
      "FOR UPDATE";

在此之后,线程将执行UPDATE并将out_status更改为99,然后它应该解锁该行。

我正在运行一个多线程的java应用程序,所以3个线程正在运行这个SQL语句,但是当线程1运行它时,它不会从线程2&amp;中锁定(隐藏)它的结果。因此,线程2&amp; 3得到了相同的结果。

此外,每个线程都有自己的mysql连接。

有人可以帮帮我吗?或许还有更好的解决方案?

非常赞赏。

3 个答案:

答案 0 :(得分:2)

我有类似的问题。来自@Vikash和@Adeel Ansari的答案都是有效的建议。但是,我使用InnoDB引擎代替MyISAM解决了该问题。 MyISAM仅允许在表级别上锁定,而不是在行级别上。使用InnoDB时,您仍需要交易。

答案 1 :(得分:1)

您可以使用transactions

答案 2 :(得分:1)

它可能正在工作,你无法注意到。假设线程1执行了该语句,并自动提交了事务,因为auto-commit已启用。当然,线程2也可以运行它。

尝试使用auto-commit类的this method关闭Connection,然后查看结果。