2012-08-08 76 views
0

我在执行中,我SELECT ...SELECT ... FOR UPDATE区分的系统。锁定为选择更新,但不锁定常规选择

常规SELECT ...用来读取实体,被允许在一个“不正确”的状态(不正确=可能会被更新后的时刻)

SELECT ... FOR UPDATE总是用于读取与目标对象进行编辑它,所以它应该返回对象的正确状态。

现在我试图执行以下操作: 只要SELECT ... FOR UPDATE语句读取对象,就会锁定对同一对象的其他SELECT ... FOR UPDATE查询。但是,常规的SELECT ...仍然可以工作。

有没有通过使用预定义的锁来做到这一点的方法? 我查看了数据库隔离级别,但我不认为它们是我的问题的一部分。

我使用Java,休眠和SQL数据库。

+0

哪个数据库产品? – kgrittn 2012-08-08 20:08:33

+0

你不需要做任何事情? 'FOR UPDATE'会锁定必要的行,直到你提交或回滚。无需在Java中进行显式锁定。另外,当你说一个SQL数据库时,你的意思是SQL Server吗? – 2012-08-08 20:10:13

+0

数据库产品:mysql for update会锁定行,但它也会锁定它们以进行常规选择,这不是我的目的。正确? – joost 2012-08-08 20:17:25

回答

0

选择更新不会锁定在MySQL中。它在Oracle,Postgres,MS SQL中工作。