2013-02-21 265 views
1

我想知道如果傳遞給查詢語句的參數lock實際上會鎖定記錄並避免併發讀取。Ruby on Rails鎖定Sqlite數據庫

例: Query.where(:id => 1, :lock => true)

這是否保證,直到我釋放鎖沒有人會讀這條記錄?

回答

0

locking的概念適用於update,而不是read。當記錄被鎖定時,通常可以查看記錄;更重要的問題是任何人在鎖定時是否可以更新記錄。

您提到的語法將在表中按名稱lock查找字段。

對於pessimistic locking with rails,語法如下:

Query.where(:id => 1).lock(true) 

如在軌道引導說明我的文檔上面鏈接:

悲觀鎖使用由底層數據庫提供了一種鎖定機構。

因此,建議查看數據庫文檔以查看該數據庫提供何種鎖定機制。

在多個rails console會話中使用鎖定功能時,我能夠從一個窗口更新記錄,而同一個記錄已從另一個窗口鎖定。

所以它看起來不像我的版本的sqlite數據庫不支持鎖定。

+1

不要忘記在當前事務結束時釋放鎖(即,如果沒有顯式事務,則在語句結尾處)。悲觀主義的鎖應該防止進一步讀取 – 2013-02-21 15:02:38