Frage

Die Idee, Transaktionen in MySQL zu verwenden, ist gut. Die Idee, eine Transaktion zu rollen, wenn etwas schief geht, ist auch gut.

Meine Frage lautet: Lohnt es sich in einer Anwendung, die Transaktion selbst zu kontrollieren oder MySQL für mich darum zu lassen? Mit anderen Worten, sollte ein aktives Misstrauen gegenüber der AutoCommit -Funktion haben, die MySQL mir gibt?

Beispiel:

try 
{
    $mysqli->autocommit( 0 );
    //Normally, would go through the steps of prepping and executing etc,
    //but I'll use this for brevity.
    if( !$mysqli->query( ".." ) )
        throw new Exception( ".." ); 
    $mysqli->commit( )
}
catch( Exception $e )
{
    $mysqli->rollback( ); //Doing this so I make sure I get my rollback
    error_log( ".." );
}

Anstatt das AutoCommit -Funktion seine eigene nützliche Arbeit zu erledigen.

Anmerkungen: Die Anwendung, die ich schreibe, ist nur für die Ausführung einer Abfrage gleichzeitig eingerichtet. Es gibt keine Situationen (wie in einigen (meisten) Bank- und anderen Finanzanträgen), in denen ich zwei Abfragen sicherstellen muss, die sich ändern Daten, Erfolg.

Dies entspricht hauptsächlich aus dem Wunsch, diese Art von Dingen zu kontrollieren (und einen gewissen Mangel in der AutoCommit -Funktion).

War es hilfreich?

Lösung

Wie so oft lautet die Antwort: Es kommt darauf an. Wenn Sie das sicherstellen möchten

update(x);
update(y);

ist atomic, dh beides updates oder keine ausgeführt, Sie sollten automatisch ausschalten. Wenn Sie nur eine Abfrage ausführen, müssen keine Transaktionen selbst kontrolliert werden. Wenn Ihre einzige Transaktion fehlschlägt, gibt es nichts zu rollen, oder?

In einem verwandten Hinweis: Sie möchten vielleicht über die lesen Säureeigenschaften von Transaktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top