Ruby on Rails锁定Sqlite数据库
问题描述:
我想知道如果传递给查询语句的参数lock
实际上会锁定记录并避免并发读取。Ruby on Rails锁定Sqlite数据库
例: Query.where(:id => 1, :lock => true)
这是否保证,直到我释放锁没有人会读这条记录?
答
locking
的概念适用于update
,而不是read
。当记录被锁定时,通常可以查看记录;更重要的问题是任何人在锁定时是否可以更新记录。
您提到的语法将在表中按名称lock
查找字段。
对于pessimistic locking with rails,语法如下:
Query.where(:id => 1).lock(true)
如在轨道引导说明我的文档上面链接:
悲观锁使用由底层数据库提供了一种锁定机构。
因此,建议查看数据库文档以查看该数据库提供何种锁定机制。
在多个rails console
会话中使用锁定功能时,我能够从一个窗口更新记录,而同一个记录已从另一个窗口锁定。
所以它看起来不像我的版本的sqlite数据库不支持锁定。
不要忘记在当前事务结束时释放锁(即,如果没有显式事务,则在语句结尾处)。悲观主义的锁应该防止进一步读取 – 2013-02-21 15:02:38