2012-08-08 53 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中工作。