1

我想知道lock传递给查询语句的参数是否实际上会锁定记录并避免并发读取。

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

这是否保证在我释放锁之前没有其他人会读取此记录?

4

1 回答 1

0

的概念locking适用于update,而不是read。当一条记录被锁定时,通常可以查看该记录;更重要的问题是当记录被锁定时是否任何人都可以更新记录。

您提到的语法将lock在表中按名称查找字段。

对于使用 rails 的悲观锁定,语法如下:

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

正如我在上面链接的 Rails 指南文档中所解释的:

悲观锁定使用底层数据库提供的锁定机制。

因此建议查看数据库文档,了解该数据库提供了什么样的锁定机制。

在多个rails console会话中使用锁定功能,我能够从一个窗口更新记录,而同一记录被另一个窗口锁定。

所以看起来我的sqlite数据库版本不支持锁定。

于 2013-02-21T11:36:28.527 回答