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

Savepoints

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Etappenziele können das Leben stark vereinfachen. Verwenden Sie Savepoints innerhalb von umfangreichen Transaktionen, um im Falle des Falles nicht alles komplett verwerfen zu müssen. Lassen Sie sich in diesem Video zeigen, wie man das am besten macht.

Transkript

Dieses Video hat zum Thema, wie Sie Transaktionen durch den Einsatz von "Savepoints" in mehrere Bereiche untergliedern können. Savepoints sind, wie der Name sagt, Punkte innerhalb einer Transaktion, zu der Sie jederzeit zurückkehren können, wenn Sie nur einen Teil der Transaktion rückgängig machen möchten und nicht gleich immer die gesamte Transaktion zurückrollen möchten. MySQL und Oracle gehen hier eigentlich im Gleichklang. Hier ist die Syntax eigentlich dieselbe. Ich füge hier in die Tabelle "Artikelgruppen" einen neuen Datensatz ein, und starte damit auch zugleich eine neue Transaktion, z.B. "MB" die Mountainbikes, starte diese Anweisung gleich einmal, dieser Datensatz ist eingefügt worden und kopiere mir die Anweisung, um gleich noch einen zweiten Datensatz einzufügen, z.B. die "BU" Bücher, die gibt es auch noch nicht als Artikelgruppe. Nun möchte ich einen Savepoint setzen. Ein Savepoint wird mit der Anweisung "Savepoint" gesetzt, kombiniert mit einem Namen, z.B. "V2B". Wichtig ist: Diese Anweisung nicht nur hinschreiben, sondern natürlich auch ausführen. Jetzt habe ich an dieser Stelle einen Savepoint gesetzt. Das heißt, wenn ich jetzt noch weitere Aktionen durchführe, kann ich die gesondert rückgängig machen, wenn ich möchte, ohne, dass ich auch das Einfügen dieser beiden Datensätze in die Tabelle "Artikelgruppen" rückgängig mache. Ich ändere nun noch einen Verkaufspreis: "Select VK-Preis" zuerst zeige ich ihn mir an "fromWawi.Artikelwhere,Artikelnummer = 1001". Schauen wir nach, was kostet dieser Artikel aktuell? 10,68 Euro. Und ich mache jetzt ein Update darauf, und sage "UpdateWawi.Artikel Set,VK-Preis = 15,00, where, Artikelnummer = 1001"; und führe diese Anweisung aus. "One Row Effected", es hat funktioniert. Jetzt habe ich hier drei Anweisungen ausgeführt, zwei vor dem Savepoint und eine nach dem Savepoint. Wenn ich jetzt "RollBack" eingebe, dann würden alle drei Anweisungen rückgängig gemacht werden. Aber jetzt möchte ich z.B. nur die Änderung rückgängig machen und möchte aber diese zwei "Inserts" erhalten. Dann kann ich jetzt nur bis zu einem Savepoint zurückrollen. Und zwar ergänze ich damit die klassische "RollBack"-Anweisung, um den Zusatz "ToSavepoint", und gebe den Namen an. Der Name ist deshalb wichtig, weil ich könnte ja natürlich auch innerhalb einer länger andauernden Transaktion mehrere "Savepoints" setzen, und da muss das System natürlich wissen, bis zu welchem Savepoint ich zurückrollen möchte, deshalb muss ich den Namen mit angeben. Nun führe ich diese Anweisung aus, und kontrollieren wir das Ergebnis! Wenn wir uns den Preis des Artikels ansehen, dann ist dieser wieder zurückgesetzt auf 10,68 Euro. Wenn wir jetzt hingegen einen Blick in die Tabelle "Artikelgruppen" werfen, dann sind die zuvor eingefügten Datensätze "Mountainbikes" und "Bücher" nach wie vor vorhanden. Die Transaktion ist auch an sich noch aufrecht, nur bis zu diesem Schritt. Was passiert jetzt, wenn ich noch einmal diese Anweisung, diese Update-Anweisung, ausführe und danach wieder bis zum Savepoint zurückrolle? Ich mache das jetzt. Das heißt, ich habe jetzt hier wieder den Preis geändert. Ich kontrolliere das. Sie sehen, momentan ist er jetzt auf 15,00 Euro geklettert, und jetzt rolle ich wieder zum Savepoint zurück. Kontrollieren wir nun den Preis, und wir sehen, dieser ist auch ein zweites Mal rückgängig gemacht worden. Das heißt, bei MySQL und auch bei Oracle ist das so, bleiben "Savepoints" beim Zurückrollen bis zum Savepoint erhalten. Das heißt, ich kann immer wieder bis zu diesem Punkt zurückrollen, sofern ich nicht über diesen Punkt hinweg zurückrolle. Das heißt, wenn ich z.B. einen früheren Savepoint ansteuere, dann werden später definierte "Savepoints" natürlich entfernt. Erst, wenn ich die gesamte Transaktion beende, wobei das jetzt keine Rolle spielt, ob ich das mittels "RollBack" rückgängig mache, oder wahlweise auch natürlich mittels "Commit" bestätige. Auf jeden Fall ist die Transaktion als solche beendet, auf die eine oder andere Art. Erst jetzt sind alle Änderungen, die noch aktiv sind,in unserem Falle alle, weil ich ein "RollBack" gemacht habe zurückgerollt. Also alle Änderungen sind jetzt hier verworfen. Wir haben jetzt hier keine "Bücher" und keine "Mountainbikes" in den Artikelgruppen, und wir hatten ja vorweg schon zum Savepoint zurückgerollt, deshalb ist auch der Preis des Artikels mit der Nummer 1001 nach wie vor in der Höhe von 10,68 Euro hier in der Tabelle eingetragen. Wie erwähnt, ist die Syntax hier bei Oracle ident, das heißt, wir können das 1:1 übernehmen. Wie sieht das Ganze beim Microsoft SQL-Server aus? Hier gibt es wieder den einen oder anderen Syntax-Unterschied. Was muss ich jetzt hier ändern? Zuerst einmal muss ich natürlich hier wieder mit "BeginTransaction" explizit eine Transaktion starten, sonst funktioniert der gesamte Vorgang nicht. Die "Insert"-Kommandos sind natürlich ident, und damit haben wir diese zwei Artikelgruppen eingefügt. Um den Savepoint zu setzen, verwenden wir anstelle der Anweisung "Savepoint" hier die Anweisung "SafeTransaction". Aber auch hinten finden wir den Namen, oder müssen wir den Namen für die Transaktion ergänzen. Ich setze nun diesen Savepoint, indem ich diese Anweisung ausführe. Nun wiederholen wir hier die Aktion mit dem Verkaufspreis 10,68 Euro, ich mache das Update, und kontrolliere diese Änderung auf 15,00 Euro sofort, und ich sehe sie hier. Nun möchte ich auch hier bis zu diesem Savepoint zurückrollen, und passe entsprechend die Anweisung "RollBack" für den Microsoft SQL-Server an, und zwar lautet hier die Anweisung "RollBack Transaction", also gleich, als würde ich die gesamte Transaktion zurückrollen, einfach nur gefolgt mit dem Namen des "Savepoints". Das hat nun bewirkt, dass wir einerseits hier wieder den alten Preis in unserer Artikeltabelle finden, aber, wenn wir in die Artikelgruppen hineinschauen, nach wie vor die "Bücher" und auch die "Mountainbikes", hier sind sie, enthalten sind. Einen inhaltlichen Unterschied gibt es hier aber gegenüber Oracle / MySQL auch noch. Wenn Sie beim Microsoft SQL-Server zu einem Savepoint zurückrollen, dann werden nicht nur die Anweisungen bis zum Savepoint zurückgerollt, sondern auch der Savepoint selber ist weg. Das heißt, wenn Sie später erneut zu diesem Savepoint zurückrollen möchten, wie wir es vorhin auch bei MySQL getan haben, dann müssten Sie diesen "Savepoint" vorweg noch einmal neu setzen. Ich tue das jetzt einfach nicht, um Ihnen zu zeigen, was passiert. Ich mache noch einmal meine Änderung hier des Preises, und ändere den Preis, und kontrolliere das Ganze: 15,00 Euro. Und wenn jetzt ich noch einmal versuche, wie erwähnt: Ich habe beim vorigen Zurückrollen zum "Savepoint" diesen "Savepoint" entfernt bekomme ich jetzt eine Fehlermeldung, dass dieses "RollBack" nicht ausgeführt werden kann, weil dieser "Savepoint" mit diesem Namen nicht gefunden worden ist. Also ich habe ich jetzt nurmehr die Möglichkeit, die gesamte Transaktion zu beenden, und nicht mehr zu diesem "Savepoint" zurückzugehen. Das kann ich entweder wie gewohnt mit "RollBack Transaction" realisieren, oder eben auch mit der Anweisung "Commit Transaction", je nachdem, was ich mit dieser Transaktion erledigen möchte. Ich führe hier ein "RollBack" aus, und damit habe ich alles wieder zurückgesetzt. Sie haben in diesem Video gesehen, wie Sie eine Transaktion durch das Setzen von sogenannten "Savepoints" unterteilen können. Sie können damit Zwischenschritte setzen, zu denen Sie zurückrollen können. Neben den kleinen Syntax-Unterschieden zwischen MySQL und Oracle einerseits, und dem MS-SQL andererseits, ist ein gewichtiger Punkt in der Logik, dass beim SQL-Server beim Zurückrollen zu einem "Savepoint" der "Savepoint" mit entfernt wird. Bei MySQL und bei Oracle bleibt dieser "Savepoint" erhalten, und kann nachher noch einmal verwendet werden. Verwenden Sie also in der Praxis "Savepoints" dazu, Transaktionen, die aus sehr vielen einzelnen Anweisungen bestehen, in mehrere Abschnitte zu untergliedern. Dadurch können Sie bei Bedarf Teile der Transaktion rückgängig machen und wiederholen, und müssen nicht immer komplett an den Start zurück.

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!