2013-02-21 229 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