我想知道lock
传递给查询语句的参数是否实际上会锁定记录并避免并发读取。
前任:
Query.where(:id => 1, :lock => true)
这是否保证在我释放锁之前没有其他人会读取此记录?
我想知道lock
传递给查询语句的参数是否实际上会锁定记录并避免并发读取。
前任:
Query.where(:id => 1, :lock => true)
这是否保证在我释放锁之前没有其他人会读取此记录?
的概念locking
适用于update
,而不是read
。当一条记录被锁定时,通常可以查看该记录;更重要的问题是当记录被锁定时是否任何人都可以更新记录。
您提到的语法将lock
在表中按名称查找字段。
对于使用 rails 的悲观锁定,语法如下:
Query.where(:id => 1 ).lock( true )
正如我在上面链接的 Rails 指南文档中所解释的:
悲观锁定使用底层数据库提供的锁定机制。
因此建议查看数据库文档,了解该数据库提供了什么样的锁定机制。
在多个rails console
会话中使用锁定功能,我能够从一个窗口更新记录,而同一记录被另一个窗口锁定。
所以看起来我的sqlite数据库版本不支持锁定。