ActiveRecord交易只是往返数据库的一次吗?

Hen*_*hiu 4 ruby activerecord ruby-on-rails rails-activerecord

如果我正在执行一堆查询,包含在Activerecord事务中,那么所有那些查询都会在1次往返中发送到数据库(即所有查询都发送到db,并且响应被发回),或者每个查询是否占用每次1趟?

示例代码:

ActiveRecord::Base.transaction do   
      queries.each do |query|
           ActiveRecord::Base.connection.execute(query)
      end
end
Run Code Online (Sandbox Code Playgroud)

如果是后者,有没有办法强制在一次往返中执行事务中的所有查询?

mu *_*ort 5

ActiveRecord::Base.transaction调用将对数据库进行两次调用:

  • 一个告诉数据库启动事务.
  • 另一个当块退出时告诉数据库提交或回滚事务.

每次ActiveRecord::Base.connection.execute通话也与数据库通信.这必须发生在您execute可能引发异常或返回有用数据的查询中.通常,每个SQL语句都是对数据库的单独调用(即往返).

但是,只能使用一个数据库连接.