[英]Implication of ActiveRecord::Base.transaction on multiple tables
我很好奇帶有MySQL數據庫的Rails如何處理涉及多個表的事務的表/行鎖定。
我有一種情況,我需要一次更新許多記錄,但是我還必須更新一些相關的記錄。 我需要確保所有記錄均已更新,並且如果任何更新失敗,則所做的更改將回滾。
我為此考慮過一個ActiveRecord :: Base.transaction塊,但一位同事問有關所涉及模型的表鎖定。
這是我的代碼的精簡示例:
Change.transaction do
Change.all.each do |change|
new_item = Item.new
new_trait = Trait.new
new_trait_value = TraitValue.new
new_trait.options << new_trait_value
new_item.traits << new_trait
new_trait.save
end
end
筆記:
那么在這種情況下,所有四個表都被鎖定了嗎? 還是僅更改表被鎖定?
如果所有四個表都被鎖定,並且該過程需要幾分鍾的時間才能完成,那么使用事務可能不適合我的情況,因為我不想阻止其他用戶添加/更新Item記錄。
我強烈建議您activerecord-import gem或編寫原始sql查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.