Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

Starten und Zurückrollen einer Transaktion

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Kommando retour! Die Anweisung ROLLBACK ist das "Bearbeiten/Rückgängig machen" bei einer Datenbank. Dieses Video zeigt Ihnen den richtigen Einsatz und was Sie davor berücksichtigen müssen, um am Ende nicht wie ein begossener Pudel da zu stehen.

Transkript

In diesem Video zeige ich Ihnen, wie Sie Transaktionen starten und, wenn Ihnen das Ergebnis nicht gefällt, wieder zurückrollen können. Starten wir mit Oracle. Oracle startet eine Transaktion automatisch mit der ersten DML-Anweisung, also einem "Insert Update" oder "Delete", das Sie ausführen. Werfen wir einen Blick in die Tabelle "Kundeninteressen", in dieser befinden sich 26 Einträge. Wenn ich nun mit Anweisung "Delete from vaviKundeninteressen" den kompletten Inhalt der Tabelle entferne, sehe ich in meiner Session keine Datensätze mehr. Das heißt, für mich ist diese Tabelle leer. Dieser Zustand ist aber vorläufig, da die Transaktion ja noch nicht abgeschlossen ist. Wenn ich also der Meinung bin, dass ich das Ergebnis dieser Transaktion nicht möchte, dann kann ich mit der Anweisung "Roll Back" diese Transaktion rückgängig machen. Ich führe die Anweisung "Roll Back" aus, ich kriege die Meldung, dass das Roll Back abgeschlossen ist. Wenn ich nun einen Blick in die Tabelle werfe, sind alle 26 Datensätze wieder verfügbar. Betrachten wir dasselbe nun in MySQL. Der Vorgang ist hier ein sehr ähnlicher. Wir sehen, auch hier haben wir 26 Datensätze in der Tabelle "Kundeninteressen". Auch diese werde ich jetzt löschen. Bevor ich das aber ausführe, werde ich noch einen Blick in den Menüpunkt "Query" werfen, denn der Editor MySQL Workbench hat standardmäßig die Option "Autocommit Transaction" aktiv. Das bedeutet, dass Sie zwar, so wie bei Oracle, mit jeder neuen DML-Anweisung sofort eine Transaktion beginnen, aber wenn diese Anweisung erfolgreich gewesen ist, wird sie automatisch sofort bestätigt. Wenn sie einmal bestätigt ist, können Sie sie nicht mehr zurückrollen. Ich empfehle Ihnen also, um sich vor Überraschungen zu schützen, diese Standardeinstellung zu deaktivieren und unter dem Menüpunkt "Query" die Option "Autocommit Transactions" zu deaktivieren. Nun kann ich beruhigt diese Anweisung ausführen, denn ich weiß, ich kann sie ja nachträglich wieder rückgängig machen. Ich starte die Transaktion. Wir sehen jetzt, dass 26 Zeilen von dieser Transaktion betroffen sind. Ich werfe einen Blick in die Kundeninteressen und wir bekommen nun keine Ergebnisse zurück. Die Anweisung zum Zurückrollen der Transaktion ist exakt dieselbe wie unter Oracle. Sie müssen schlicht nur die Anweisung "Roll Back" eintippen, ausführen, und schon sind alle Kundendatensätze beziehungsweise Kundeninteressens- Zuordnungen wieder vorhanden. Kleine Unterschiede in Logik und Ablauf gibt es beim Microsoft SQL Server. Auch hier haben wir dieselben Kundeninteressen in der Datenbank gespeichert. Ebenso mit der Anweisung "Delete from vavi.Kundeninteressen" würde ich den kompletten Inhalt der Tabelle leeren. Allerdings unterscheidet der Microsoft SQL Server zwischen impliziten und expliziten Transaktionen. Der Unterschied ist, dass der SQL Server ähnlich arbeitet wie MySQL Workbench als Editor. Während bei MySQL nur der Editor am Ende der Anweisung ein "Commit" absendet und damit die Änderung festschreibt, macht das in diesem Fall der Server. Das heißt, beim Microsoft SQL Server wird mit dieser Anweisung, wenn wir sie ausführen, eine neue Transaktion gestartet. Aber in dem Moment, wo sie erfolgreich abgeschlossen ist, wird sie auch bestätigt. Damit kann sie nicht mehr zurück geholt werden. Jede Anweisung alleine in sich wird als Transaktion gesehen und funktioniert ganz oder gar nicht. Deshalb ist es ja auch so, wenn zum Beispiel auf Grund von referenziellen Integrität nicht alle Datensätze, die Sie löschen, gelöscht werden können, bleiben auch die anderen, die vom Löschvorgang betroffen sind, erhalten. Aber in dieser Standardkonfiguration können Sie diese Änderungen nicht rückgängig machen. Wenn Sie also möchten, dass Sie den Vorgang eventuell rückgängig machen können, oder Sie wollen mehrere Anweisungen zu einer Transaktion zusammenfassen, müssen Sie eine explizite Transaktion starten. Das realisieren Sie mit der Anweisung "Begin Transaction". Sie könnten "Begin Transaction" auch abkürzen mit "Begin Tran". Das heißt, Sie können dieses Wort transaction mit den ersten vier Buchstaben tran abkürzen. Ganz entscheidend ist, das dürfen Sie auf keinen Fall vergessen, dass Sie diese Anweisung nicht nur in den Editor eintragen, sondern dass Sie sie unbedingt auch einmal ausführen, denn sonst weiß der Server nichts davon und Sie haben gar keine Transaktion. Das würde dann ein unliebsames Ergebnis liefern. Ich starte nun die Transaktion mit "Ausführen" und nun ist die Transaktion aktiv. Jetzt kann ich sozusagen unbeschwert den kompletten Inhalt aus unserer Tabelle leeren, indem ich die "Delete-Anweisung" ausführe. Bei der Kontrolle sehen wir, dass die Tabelle leer ist. Nachdem ich jetzt diese Transaktion wirklich gestartet habe, jetzt könnte ich noch mehrere Schritte hier erledigen, kann ich mit der Anweisung "Roll Back", und hier muss zusätzlich auch wieder "Tran" oder "Transaction" ergänzt werden, also auch die Syntax unterscheidet sich hier ein wenig von Oracle und MySQL, diese Änderung wieder rückgängig machen. Ich rolle jetzt die Transaktion zurück. Das ganze hat funktioniert und wenn ich die Kontrolle mache, finden wir alle unsere Datensätze hier wieder vor. Ich zeige es Ihnen nun zum Abschluss, was es mit diesem "Autocommit" beim Microsoft SQL Server auf sich hat. Wenn ich jetzt zum Beispiel eine Anweisung verwende "Delete from vavi.Artikel where Artikelnummer = 1771". Dann lösche ich jetzt, ich hoffe, ich habe nicht genau einen Artikel erwischt, den die referenzielle Integrität schützt. Ich lösche diesen Artikel und ich habe ihn jetzt gelöscht. Nachdem ich zuvor keine explizite Transaktion mit "Begin Transaction" realisiert habe, kann ich sie auch nicht zurück rollen. Diese Änderung ist nämlich schon festgeschrieben und deshalb gibt es kein Zurück mehr. Versuche ich es dennoch, bekomme ich eine Fehlermeldung, dass ich kein "Begin" für diese Transaktion habe und deshalb nicht zurück rollen kann. Das heißt, die Kontrolle wird mir zeigen, dass dieser Datensatz endgültig gelöscht worden ist und in meiner Datenbank nicht mehr vorhanden ist. Achten Sie also beim Microsoft SQL Server darauf, dass Sie immer explizit mit der Anweisung "Begin Transaction" eine solche starten, wenn Sie möchten, dass entweder mehrere Anweisungen zu einer Transaktion zusammengefasst werden oder die Änderung nur vorläufig ist und von Ihnen kontrolliert werden kann und bei Bedarf wieder rückgängig gemacht werden kann. Bei MySQL und bei Oracle werden Transaktionen automatisch mit der ersten Anweisung, die noch nicht zu einer Transaktion gehört, gestartet und mit der Anweisung "Roll Back" rückgängig gemacht. Gegebenenfalls könnte es eine Falle sein, dass in MySQL Workbench standardmäßig ein "Autocommit" eingeschalten ist. Das können Sie über den Menü-Befehl "Query" über die Option "Autocommit Transactions" deaktivieren. In diesem Fall verhält sich MySQL dann gleich wie Oracle. Mit jeder Anweisung wird eine Transaktion gestartet und mit der Anweisung "Roll Back" können Sie diese zurückholen. Verwenden Sie also in der Praxis Transaktionen, wenn Sie Änderungen, die Sie vornehmen, nicht gleich festschreiben möchten, sondern selber noch kontrollieren möchten, bevor diese Änderungen dann freigegeben werden.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!