Ich habe das folgende Stück Code in Rails 3.2 + mySQL Anwendung:Rails Activeverbindungssitzung
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
Soweit ich die erste Aussage verstehen in der nächsten Transaktion innerhalb derselben Sitzung in sein führen wird " READ UNCOMMITTED "Isolation und dann Isolation wird auf den Standardwert zurückgesetzt.
Meine Fragen sind: Kann ich sicher sein, dass der Transaktionsblock immer in der gleichen Sitzung ausgeführt wird? Kann ich außerdem sicher sein, dass keine andere Transaktion in derselben Sitzung zwischen der ersten und der zweiten Anweisung stattfindet?
Ich habe versucht, Google für dieses Thema, aber da ich neu bei Rails bin, konnte ich keine Erklärung finden, die mir dies deutlich machen würde. Jede Hilfe wäre willkommen!
Vielen Dank!
Vielen Dank. Das hilft! Ja, es scheint, dass Rails 4 eine bessere Lösung dafür hat, aber leider kann ich jetzt nicht mit dem aktuellen Projekt nach Rails 4 migrieren. –
Eine weitere Frage: Ist es notwendig, die Anweisung wie im Code in den Transaktionsblock zu schreiben? Funktioniert die Isolation noch korrekt, wenn ich nur sql-Anweisungen ohne Transaktionsblock ausführen möchte? –
Ja, wie in [http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html] erläutert, ist die Isolationseinstellung für den nächsten Transaktionsblock gültig. Auch das Festlegen einer Isolation auf Sitzungsebene ist nur für alle nachfolgenden Transaktionsblöcke gültig. – BoraMa