私はRailsの3.2 + MySQLのアプリケーションで、次のコードを持っている:私の知る限りは、最初の文は "にあるように、同じセッション内で、次のいずれかのトランザクションになります理解しRailsのActiveRecordの接続セッション
ActiveRecord::Base.connection.execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
ActiveRecord::Base.transaction do
@book = ActiveRecord::Base.connection.execute("select * from books limit 1")
end
READ UNCOMMITTED "分離が行われ、その後分離がデフォルトに戻ります。
私の質問は次のとおりです。トランザクションブロックが常に同じセッションで実行されることを確認できますか?また、同じセッションで最初のステートメントと2番目のステートメントの間に他のトランザクションが発生しないことを確認できますか?
私はこのトピックについてGoogleに挑戦しましたが、私がRailsに慣れてきたので、私にこれを明らかにする説明は見つかりませんでした。どんな助けもありがとう!
ありがとうございました!
ありがとうございます。これは役に立ちます!はい、これはRails 4の方が優れているようですが、残念ながら現在のプロジェクトでRails 4に移行することはできません。 –
フォローアップの質問:私がコードで行ったように、トランザクションブロックで文をラップする必要がありますか?トランザクションブロックなしでSQL文を実行するだけで、分離は正常に機能しますか? –
はい、ここで説明されているように(http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html)、分離設定は次のトランザクションブロックに対して有効です。セッションレベルの分離設定も、後続のすべてのトランザクションブロックに対してのみ有効です。 – BoraMa