Locking database records

如果你需要同时更新同一条数据,例如计数问题。

 

举个例子。现在counter是42,同时更新counter到43并保存,那么此时的结果便会相差1。

 

这时,为了避免这种情况,你可以将这条记录锁定:

 

User.transaction do
  user = User.find(1, :lock => true)
  user.counter += 1
  user.save!
end

 

这时,只有counter更新到43时,第二次更新才会被保存,从而保证最终的counter为44。

你可能感兴趣的:(database)