1

lockパラメータがクエリステートメントに渡されると、実際にレコードがロックされ、同時読み取りが回避されるかどうかを知りたいです。

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

これは、ロックを解除するまで誰もこのレコードを読み取らないことを保証しますか?

4

1 に答える 1

0

の概念はにlocking適用されますがupdate、には適用されませんread。レコードがロックされている場合、通常はレコードを表示できます。より重要な質問は、レコードがロックされているときに誰でもレコードを更新できるかどうかです。

あなたが言及した構文lockは、テーブル内の名前でフィールドを検索します。

レールを使用した悲観的なロックの場合、構文は次のとおりです。

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

上でリンクしたレールガイドのドキュメントで説明されているように:

ペシミスティックロックは、基盤となるデータベースによって提供されるロックメカニズムを使用します。

したがって、データベースのドキュメントを調べて、そのデータベースによって提供されるロックメカニズムの種類を確認することをお勧めします。

複数のrails consoleセッションでロック機能を試してみると、同じレコードが別のウィンドウからロックされている間に、あるウィンドウからレコードを更新することができました。

したがって、私のバージョンのsqliteデータベースがロックをサポートしていないようには見えません。

于 2013-02-21T11:36:28.527 に答える