2010-07-08 66 views

回答

23

鎖定不是rails的函數,它只是將鎖定語句添加到查詢中,該查詢將根據您使用的數據庫而有所不同。悲觀鎖定在認爲每個查詢都受到腐敗時都會採用「悲觀」的觀點。因此,它將鎖定選定的行,直到您完成交易。所以鎖定>查詢>解鎖。雖然這些數據庫與數據庫的數據庫相當一致,但最好閱讀一下數據庫文檔,以瞭解您應該瞭解的任何特定於數據庫的內容。

這是樂觀與悲觀的鎖定的一個很好的線索,它比我能解釋得更好。 Optimistic vs. Pessimistic locking

+1

感謝。我使用的是mySQL,所以我在那些文檔中查找它,並且說事務提交或回滾時鎖被釋放。我不知道它是如何在交易之外運作的。 – user26270 2010-07-08 18:48:36

+1

「鎖定不是導軌的函數」 - 樂觀鎖定是,而悲觀鎖定基於DB的低級支持。 – Felixyz 2012-12-19 10:38:09

+0

它鎖定整個數據庫??! – AjaxLeung 2016-10-28 02:23:12

4

是的,鎖在交易結束時自動釋放,因爲這種鎖只適用於交易。在交易之外以這種方式鎖定記錄(悲觀鎖)是沒有意義的。

悲觀鎖定在數據庫級別上執行。

下面是一個例子描述爲MySQL: http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

+1

這是正確的,它不是查詢結束,而是* transaction *結束。我確定了最好的混淆的答案。 – lzap 2014-01-27 11:27:34