什么时候在铁轨上发布一个悲观的锁?

use*_*270 14 locking ruby-on-rails pessimistic

假设我正在做这样的事情(来自Active Record Querying指南)

Item.transaction do  
  i = Item.first(:lock => true)  
  i.name = 'Jones'  
  i.save 
end 
Run Code Online (Sandbox Code Playgroud)

是否在交易结束时自动释放锁定?我查看了Active Query指南和ActiveRecord :: Locking :: Pessimistic文档,但无法找到明确说明锁定释放位置的位置.

Geo*_*tte 24

锁定不是rails的功能,它只是将lock语句添加到查询中,这将根据您使用的数据库而有所不同.Pessimistic Locking认为每个查询都会受到腐败,因此采取"悲观"的观点.因此,它将锁定选定的行,直到您完成事务.所以锁定>查询>解锁.虽然这些数据库与数据库相当一致,但是阅读您用于任何您应该知道的特定于数据库的事物的数据库文档可能会很好.

这是一个关于乐观与悲观锁定的好线程,它比我能更好地解释它. 乐观与悲观锁定

  • 谢谢。我正在使用 mySQL,所以我在这些文档中查找了它,它说当事务提交或回滚时锁被释放。我不知道它在交易之外是如何运作的。 (3认同)

小智 5

是的,锁在事务结束时自动释放,因为这种锁仅适用于事务.在事务之外以这种方式(悲观锁定)锁定记录是没有意义的.

悲观锁在DB级别上强制执行.

以下是mysql示例的说明:http: //dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html