Wenn Sie sich der Transaktionsbehandlung (Autocommit, explizit und implizit) für Ihre Datenbank bewusst sind, müssen Sie möglicherweise keine Daten aus einer Sicherung wiederherstellen.
Transaktionen steuern Datenmanipulationsanweisungen, um sicherzustellen, dass sie atomar sind. "Atomic" zu sein bedeutet, dass die Transaktion entweder stattfindet oder nicht. Die einzige Möglichkeit, den Abschluss der Transaktion an die Datenbank zu signalisieren, ist die Verwendung einer Anweisung COMMIToder ROLLBACK(gemäß ANSI-92, das leider keine Syntax zum Erstellen / Starten einer Transaktion enthielt, sodass diese herstellerspezifisch ist). COMMITwendet die im Rahmen der Transaktion vorgenommenen Änderungen (falls vorhanden) an. ROLLBACKignoriert alle Aktionen, die innerhalb der Transaktion stattgefunden haben - sehr wünschenswert, wenn eine UPDATE / DELETE-Anweisung etwas Unbeabsichtigtes tut .
In der Regel werden einzelne DML-Anweisungen (Einfügen, Aktualisieren, Löschen) in einer Autocommit-Transaktion ausgeführt. Sie werden festgeschrieben, sobald die Anweisung erfolgreich abgeschlossen wurde. Dies bedeutet, dass es keine Möglichkeit gibt, die Datenbank auf den Status zurückzusetzen, bevor die Anweisung in Fällen wie Ihrem ausgeführt wurde. Wenn etwas schief geht, besteht die einzige verfügbare Wiederherstellungsoption darin, die Daten aus einer Sicherung zu rekonstruieren (sofern eine vorhanden ist). In MySQL ist autocommit auf standardmäßig für InnoDB - MyISAM unterstützt keine Transaktionen. Es kann deaktiviert werden mit:
SET autocommit = 0
Eine explizite Transaktion liegt vor, wenn Anweisungen in einen explizit definierten Transaktionscodeblock eingeschlossen werden - für MySQL alsoSTART TRANSACTION . Es erfordert auch eine explizite Abgabe COMMIToder ROLLBACKErklärung am Ende der Transaktion. Verschachtelte Transaktionen gehen über den Rahmen dieses Themas hinaus.
Implizite Transaktionen unterscheiden sich geringfügig von expliziten. Implizite Transaktionen erfordern keine explizite Definition einer Transaktion. Wie bei expliziten Transaktionen muss jedoch eine COMMIToder ROLLBACK-Erklärung angegeben werden.
Fazit
Explizite Transaktionen sind die idealste Lösung - sie erfordern eine Erklärung COMMIToder ROLLBACK, um die Transaktion abzuschließen, und was passiert, ist klar angegeben, damit andere es lesen können, wenn es nötig ist. Implizite Transaktionen sind in Ordnung, wenn Sie interaktiv mit der Datenbank arbeiten. COMMITAnweisungen sollten jedoch erst angegeben werden, wenn die Ergebnisse getestet und gründlich als gültig bestimmt wurden.
Das heißt, Sie sollten verwenden:
SET autocommit = 0;
START TRANSACTION;
UPDATE ...;
... und nur verwenden, COMMIT;wenn die Ergebnisse korrekt sind.
Allerdings geben UPDATE- und DELETE-Anweisungen normalerweise nur die Anzahl der betroffenen Zeilen zurück, nicht bestimmte Details. Konvertieren Sie solche Anweisungen in SELECT-Anweisungen und überprüfen Sie die Ergebnisse, um die Richtigkeit sicherzustellen, bevor Sie die UPDATE / DELETE-Anweisung ausführen.
Nachtrag
DDL-Anweisungen (Data Definition Language) werden automatisch festgeschrieben - sie erfordern keine COMMIT-Anweisung. IE: Anweisungen zum Erstellen oder Ändern von Tabellen, Indizes, gespeicherten Prozeduren, Datenbanken und Ansichten.