2016-06-10 2 views
0

Ich habe vor kurzem angefangen mit PHP/Laravel zu arbeiten (ich arbeite seit über 15 Jahren mit Java). Ich habe bemerkt, diesen Code in der Code-Basis:Laravel: Was ist, wenn Sie die manuell gestartete Transaktion nicht committen oder zurücksetzen?

public function doSomeStuffInDb() { 
    DB::beginTransaction(); 
    // Some db calls here 
    DB::commit(); 
} 

ich bereits in der Dokumentation, dass der richtige Weg, es zu tun ist DB::transaction mit einem Verschluss der db Anrufe enthält, zu verwenden.

Aber ich frage mich, was passiert, wenn es eine Ausnahme gibt, die die Datenbank vor dem DB::commit() Aufruf ruft? Ich nehme an, nichts wird in der Datenbank gespeichert werden, da Sie nicht commit, aber kann es weitere Konsequenzen haben (db Zeilensperren?)? Wird die Transaktion beim Verlassen der Funktion abgebrochen?

Antwort

0

Jede Transaktion, die nicht festgeschrieben oder rückgängig gemacht wurde, weist möglicherweise die gleichen Gefahren auf: Dirty Reads, Non-Repeatable Reads, Phantom Reads und all die anderen Überlegungen, die Sie auch in Java implementieren würden.

Bedeutung - auch wenn die Sperrung auf Zeilenebene ausgeführt wird und Abfragen als nicht synchronisierende konsistente Lesevorgänge ausgeführt werden, haben Sie viele weitere Konsequenzen. Locks werden abhängig von Ihrer Datenbank-Konfiguration behandelt, einige Zeit sie aus, einige lassen sie sein.

+0

Wir verwenden MySQL, wenn das wichtig ist –

Verwandte Themen