Die Transaktionsverarbeitung ist ein sehr wichtiger Teil bei der Verwendung von PDO (PHP -Datenobjekte) für Datenbankoperationen. Über PDO :: begintransaction () können wir eine Datenbanktransaktion starten und sicherstellen, dass wir nach Abschluss einer Reihe von Operationen Commits oder Rollbacks durchführen können. Obwohl PDO eine einheitliche API liefert, gibt es einige geringfügige Unterschiede zwischen MySQL und PostgreSQL im Transaktionsimplementierungsmechanismus. In diesem Artikel wird der Implementierungsmechanismus und die Unterschiede von PDO :: BeginnTransaction in diesen beiden Datenbanken untersucht.
Als weit verbreitete relationale Datenbank hängt der Transaktionsmanagement -Mechanismus von MySQL von der Art der Speicher -Engine ab. Die häufigste Speichermotor ist InnoDB, die Säure (Atomic, Konsistenz, Isolation und Persistenz) unterstützt. Daher stützt sich das Transaktionsmanagement von MySQL stark auf die Funktionen der InnoDB Storage Engine.
In MySQL löst Pdo :: begintransaktion () den Beginn einer Transaktion aus. MySQL verwendet implizite Transaktionen , dh unter der InnoDB -Engine, sobald begintransaktion () aufgerufen wird, die Datenbank eine neue Transaktion startet und alle nachfolgenden SQL -Vorgänge in dieser Transaktion aufgenommen werden, bis die Transaktion explizit bezeichnet wird () () oder Rollback () .
Starten Sie eine Transaktion : Wenn Sie pdo :: begintransaction () aufrufen, markiert MySQL die aktuelle Verbindung als Transaktionsmodus.
SQL -Operationen ausführen : Während die Transaktion im Gange ist, werden alle Einfügen , Aktualisieren , Löschen und andere Vorgänge nicht sofort in die Datenbank bestehen, sondern im Speicher gespeichert und auf die Einreichung warten.
Commit Transaction : Rufen Sie PDO :: commit () an und alle Änderungen werden in der Datenbank bestehen.
Rollback -Transaktion : Rufen Sie PDO :: Rollback () an und alle Änderungen werden widerrufen.
Automatischer Komitiemodus : Wenn in MySQL die Transaktion nicht explizit gestartet wird, aktiviert die Datenbank standardmäßig den automatischen Commit -Modus, dh jede SQL -Anweisung wird automatisch übermittelt.
Transaktions -Isolationsstufe : MySQL unterstützt mehrere Transaktions -Isolationsniveaus, wie z . Diese Isolationsstufen können durch die PDO -Konfiguration eingestellt werden.
PostgreSQL ist eine leistungsstarke Objektdatenbank mit einer hervorragenden Transaktionsunterstützung und entspricht streng den Säureprinzipien. In PostgreSQL ähnelt die Transaktionsmanagement MySQL, und PDO :: BeginnTransaction () startet auch eine Transaktion und enthält nachfolgende Operationen innerhalb der Transaktion.
Im Vergleich zu MySQL weist der Transaktionsmechanismus von PostgreSQL einige einzigartige Merkmale auf, insbesondere in Bezug auf Isolierung und Konsistenz .
Starten Sie eine Transaktion : Ähnlich wie bei MySQL startet pdo :: begintransaction () , PostgreSQL, explizit eine Transaktion, und alle SQL -Operationen sind in dieser Transaktion enthalten.
Führen Sie SQL -Operationen aus : Alle SQL -Anweisungen bestehen die Datenbank innerhalb der Transaktion erst nach der Verpflichtung der Transaktion.
Transaktion einreichen : Wenn pdo :: commit () aufgerufen wird, werden alle Änderungen in der Datenbank dauerhaft gespeichert.
Rollback -Transaktion : Rufen Sie PDO :: Rollback () auf, alle Änderungen während der Transaktion werden widerrufen.
Strenge Transaktionskontrolle : PostgreSQL betont MVCC (Mehrversionskontrolle) , jede Transaktion hat ihre eigene Ansicht und Datenkonsistenz, sodass sie nicht von anderen gleichzeitigen Transaktionen beeinflusst wird.
Automatikübermittlung : PostgreSQL ermöglicht die automatische Einreichung standardmäßig, ähnlich wie bei MySQL. Wenn eine Transaktion nicht explizit aktiviert ist, wird jede SQL -Anweisung als unabhängige Transaktion behandelt.
Transaktions -Isolationsstufe : Die Standard -Transaktions -Isolierungsstufe für PostgreSQL wird verpflichtet , aber strengere Isolationsstufen können durch Konfiguration verwendet werden, wie z. B. wiederholbares Lesen und serialisierbar .
MySQL verwendet Sperrenmechanismus und Konsistenz, um die Transaktionsisolation zu gewährleisten, aber die Granularität und die Kontrolle der Parallelitätsregelung beruht jedoch mehr von der Speichermotor. Wiederholbares Lesen ist die Standard -Transaktions -Isolierungsstufe für MySQL und kann auf Phantom -Lesen stoßen, es sei denn, die Serialisierungsisolierungsstufe wird eingeschaltet.
PostgreSQL verwendet MVCC, um die gleichzeitige Kontrolle von Transaktionen zu implementieren, was es isolierter macht und das Phänomen des Illusions -Lesens vermeidet. Jede Transaktion hat eine unabhängige Sichtweise und wird erst von anderen Transaktionen beeinflusst, wenn sie explizit begangen werden.
Wenn MySQL die InnoDB Storage Engine verwendet, umfasst Transaktions -Commits das Schreiben von Protokoll- und Verriegelungsvorgängen, sodass die Leistung von Transaktionsaufnahmen bis zu einem gewissen Grad betroffen ist. Für häufige Transaktionsausschüsse kann es erforderlich sein, die Transaktionsgröße zu optimieren und Richtlinien zu begehen.
Der MVCC -Mechanismus von PostgreSQL ermöglicht es ihm, gleichzeitige Vorgänge effizienter zu verarbeiten, wenn sich die Transaktion anschreibt, aber möglicherweise auch zu einem höheren Speicheraufwand führen, wenn die Transaktionen lang sind.
Wenn in MySQL ein Fehler auftritt, wird pdo :: rollback () alle Vorgänge widerrufen und das zugehörige Schloss freigeben.
In PostgreSQL wird PDO :: Rollback () , wenn eine Transaktion fehlschlägt, alle Vorgänge widerrufen und die Datenbankkonsistenz verwaltet. MVCC stellt sicher, dass der Datenbankzustand zu Beginn der Transaktion in den Status wiederhergestellt wird.
MySQL ermöglicht die automatische Einreichung standardmäßig, es sei denn, die automatische Einreichung ist explizit deaktiviert (z. B. durch Einstellen der Eigenschaft pdo :: attr_autocommit ).
PostgreSQL ermöglicht auch standardmäßig das automatische Commit, aber nachdem Transaktionen aktiviert sind, wird das automatische Komitee bis zum Ausdruck () oder Rollback () ausdrücklich deaktiviert.
Obwohl sowohl MySQL als auch PostgreSQL Säureprinzipien folgen und eine einheitliche Transaktionskontrollschnittstelle über PDO :: begintransaktion () bereitstellen, haben sie einige Unterschiede in ihrer zugrunde liegenden Implementierung. MySQL stützt sich auf Speichermotoren (z. B. InnoDB), um Transaktionen zu verwalten, während PostgreSQL durch den MVCC -Mechanismus eine stärkere Kontrollsteuerung und Transaktionsisolation bietet. Bei der Auswahl einer Datenbank können Sie ihre Unterschiede in der Transaktionsverarbeitung verstehen, die auf der Grundlage der Anforderungen des spezifischen Anwendungsszenarios angemessenere Entscheidungen treffen.