我正在使用Java和MySql作为数据库。
我正在运行多个应用程序实例。我正在从数据库中选择一条记录,同时在获取后,我将其状态更新为“正在进行中”,以便其他实例无法访问该记录。
但是,实际情况是实例运行得如此之快,以至于当一个实例访问一条记录时,另一个实例也会在第一个实例对“正在处理”进行更新之前访问同一条记录。我应该怎么做才能在其他实例访问它之前进行更新?我在代码中使用了conn.setTransactionIsolation(conn.TRANSACTION_READ_COMMITTED)
,但这也无济于事。
提前致谢。
答案 0 :(得分:2)
您需要select for update
类型的陈述。
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
答案 1 :(得分:0)
我认为您的问题的解决方案是同步块。有两种方法可以执行此操作。写入同步块或将该更新数据库代码放入一个已同步的方法中。因此,如果一个线程正在进行更改,那么没有其他线程可以访问它。 有关更多参考click here