2016-05-28 16 views
-1

In PHP können Sie Transaktionen starten, wenn Sie Abfragen ausführen. Aber wenn sollte Sie es verwenden? Ist es schlecht, diese Funktion bei jeder Abfrage zu verwenden? Oder sollten Sie diese Abfrage nur verwenden, wenn Sie große Datenmengen hinzufügen/entfernen/aktualisieren?Ist es eine schlechte Praxis, PHP-Transaktionen mit jeder Abfrage zu verwenden?

Beispiel einer Transaktion:

try { 
    $db->beginTransaction(); 

    $db->exec("some query"); 

    $stmt = $db->prepare("another query"); 
    $stmt->execute(array($value)); 

    $stmt = $db->prepare("another query again??"); 
    $stmt->execute(array($value2, $value3)); 

    $db->commit(); 
} catch(PDOException $ex) { 
    //Something went wrong rollback! 
    $db->rollBack(); 
    echo $ex->getMessage(); 
} 

Meine Vermutung wäre, dass es schwer Leistung bringen würde, wenn Sie dies in Ihrem Code bei jeder Abfrage tun

tl; dr Können Sie Transaktionen verwenden mit jeder Abfrage? Oder sollten Sie sie nur verwenden, wenn Sie große Änderungen an der Datenbank vornehmen?

Antwort

0

Sie müssen auf jeden Fall Transaktionen verwenden, wenn Sie alle Änderungen vornehmen möchten oder keine. Zum Beispiel, wenn Sie Geld von einer Person auf eine andere übertragen, sollten Sie das Guthaben erhöhen und ein anderes verringern.

Es ist gut, Transaktionen zu verwenden, wenn Sie viele einfache Abfragen haben und Leistung benötigen. Es hängt von der Datenbank ab, aber oft versuchen Datenbanken alle Änderungen im Speicher während der Transaktion vorzunehmen und erst dann auf die Festplatte zu spülen. Speicher ist viel schneller als Festplatten.

Aber es ist nur wichtig, wenn Sie eine Highload-Site haben oder 1000s Datensätze einfügen müssen und jede 100ms wichtig ist. Wenn Sie weniger als 100 Abfragen haben, sind sie einfach und es gibt nichts Falsches, wenn Sie die Hälfte davon ausführen und dann Skript-Unterbrechungen (Server-Neustart, PHP-Timeout, ...) und Ihre Daten konsistent sind - Sie dürfen keine Transaktionen verwenden.

Wenn Sie denken, dass Sie keine Transaktionen verwenden, wenn Sie sie nicht explizit starten, liegen Sie möglicherweise falsch. Es hängt von der Datenbank ab, aber es kann Transaktion mit jeder Abfrage automatisch starten.
https://stackoverflow.com/a/2950764/437763