Bevor wir uns mit MySQLi :: Release_Savoint eintauchen, müssen wir verstehen, welche Transaktionen sind und welcher Rollback -Mechanismus. Transaktionen beziehen sich auf eine Sammlung einer Reihe von Datenbankvorgängen, die entweder erfolgreich oder alle fehlschlagen und zurückrollen (d. H. Alle ausgeführten Operationen rückgängig). Transaktionen umfassen normalerweise die folgenden vier Merkmale, die gemeinsam als Säureeigenschaften bezeichnet werden:
Atomizität : Alle Operationen in einer Transaktion werden entweder vollständig ausgeführt oder überhaupt nicht ausgeführt.
Konsistenz : Die Datenbank muss vor und nach der Ausführung der Transaktion in einem konsistenten Zustand sein.
Isolierung : Die Ausführung einer Transaktion sollte nicht durch andere Transaktionen gestört werden.
Haltbarkeit : Nach Abschluss der Transaktion sind die Änderungen an der Datenbank dauerhaft.
Wenn während der Transaktionsausführung ein Fehler auftritt, kann der Entwickler den Rollback -Mechanismus verwenden, um die Datenbank in seinem Zustand wiederherzustellen, bevor die Transaktion beginnt. Rollback kann durch Rollback SQL -Anweisung implementiert werden.
Ein SavePoint ist ein Markerpunkt in einer Transaktion, mit dem Entwickler mehrere Kontrollpunkte in einer Transaktion festlegen können. Wenn eine Transaktion Probleme hat, kann der Entwickler zu einem Savepoint zurückkehren, anstatt die gesamte Transaktion vollständig zurückzurollen. Dies kann den durch Fehler verursachten Operationsrollback -Bereich verringern und die Effizienz verbessern.
Angenommen, eine Transaktion erfordert eine Reihe von Operationen, und in einigen Schritten kann der Entwickler einen Savepoint verwenden, um einige Operationen rückgängig zu machen, anstatt alle erfolgreich ausgeführten Operationen zu verlieren.
Mit der Funktion von MySQLI :: Release_Savoint wird ein in einer Transaktion erstellter Speicherpunkt veröffentlicht (löschen). Wenn der Entwickler bestätigt, dass kein Speicherpunkt mehr benötigt wird, kann die Funktion aufgerufen werden, um sie zu befreien, wodurch Ressourcen aufgeräumt werden, die in der Datenbank nicht mehr verwendet werden. Der Vorteil davon ist, dass es dazu beiträgt, die Anzahl der Speicherpunkte in der Transaktion zu verringern und ein effizientes Transaktionsmanagement sicherzustellen.
<span><span>mysqli::</span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$savepoint</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
$ SavePoint : Der Name des zu veröffentlichenden Savepoint.
Erfolg : Return True .
Fehlgeschlagen : Return falsche und Fehlerinformationen können über mySQLI_Error () erhalten werden.
Hier ist ein Beispiel, das zeigt, wie MySQLI :: Release_Savepoint verwendet wird, um Transaktionen und Speicherpunkte zu verwalten:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen Sie eine Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// Überprüfen Sie, ob die Verbindung erfolgreich ist</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Starten Sie eine Transaktion</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// Erstellen Sie einen Speicherpunkt</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint1"</span></span><span>);
</span><span><span class="hljs-comment">// Führen Sie einige Datenbankvorgänge aus</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')"</span></span><span>);
</span><span><span class="hljs-comment">// Erstellen Sie einen weiteren Speicherpunkt</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint2"</span></span><span>);
</span><span><span class="hljs-comment">// Andere Aktionen ausführen</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO orders (user_id, product) VALUES (LAST_INSERT_ID(), 'Laptop')"</span></span><span>);
</span><span><span class="hljs-comment">// Angenommen, es gibt hier einen Fehler,Müssen zurückgehen zusavepoint1</span></span><span>
</span><span><span class="hljs-comment">// Wenn Sie zurückgehen möchtensavepoint1,VerfügbarROLLBACK TO SAVEPOINTStellungnahme</span></span><span>
</span><span><span class="hljs-comment">// $mysqli->query("ROLLBACK TO SAVEPOINT savepoint1");</span></span><span>
</span><span><span class="hljs-comment">// Wenn alles gut läuft,Lösen Sie den Speicherpunkt</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-string">"savepoint1"</span></span><span>);
</span><span><span class="hljs-comment">// Transaktionen einreichen</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-comment">// Fangen Sie Ausnahmen an und rollen Sie die gesamte Transaktion zurück</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Transaktionsrollback: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-comment">// Schließen Sie die Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Im obigen Code:
Erstellen Sie einen SavePoint mit SavePoint .
Verwenden Sie MySQLi :: Release_Savointpoint , um SavePoint1 zu veröffentlichen, um anzuzeigen, dass dieser SavePoint nicht mehr benötigt wird.
Wenn die Transaktion fehlschlägt, können Sie über Rollback zu einem Rollback zu einem Speicherpunkt zurückkehren oder die gesamte Transaktion über Rollback rollen.
Die Hauptfunktion von MySQLI :: Release_Savepoint besteht darin, keine Sparpunkte mehr zu veröffentlichen und so die rechtzeitige Reinigung von Ressourcen sicherzustellen. Insbesondere beim Umgang mit komplexen Transaktionen können mehrere Speicherpunkte festgelegt werden. Wenn diese Speicherpunkte nicht veröffentlicht werden, belegen sie weiterhin Systemressourcen und beeinflussen die Leistung der Datenbank. Daher ist die Verwendung von MySQLI :: Release_Savepoint, um Speicherpunkte zu veröffentlichen, die nicht mehr benötigt werden, eine gute Möglichkeit, Ressourcen zu verwalten.
Ressourcen sparen : Release Save Points, die Sie nicht mehr vermeiden müssen, um Ressourcen zu verschwenden.
Verbesserung der Effizienz : Durch die Reduzierung der Anzahl der Sparpunkte in einer Transaktion werden die Effizienz der Transaktion zur Durchführung der Transaktion verbessert.
Verbesserte Wartbarkeit : Bei langen Transaktionen wird das Transaktionsmanagement deutlicher, indem keine Speicherpunkte mehr benötigt werden.
Die MySQLI :: Release_Savoint -Funktion spielt eine wichtige Rolle im Rollback -Mechanismus von Datenbanktransaktionen. Es reduziert die Ressourcenverwendung und verbessert die Transaktionseffizienz, indem sie dazu beitragen, Sparpunkte freizugeben, die nicht mehr benötigt werden. Im Umgang mit komplexen Datenbankoperationen kann die rationale Verwendung von SavePoints und Release_Savepoint die Lesbarkeit, Wartbarkeit und Leistung des Codes erheblich verbessern.