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 2: Aufgaben und Lösungen

Beispiel 13: Referenzielle Integrität berücksichtigen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Da die Sportprodukte aus dem Sortiment genommen werden, benötigen Sie auch das entsprechende Interesse und seine Zuordnungen an diverse Kunden für Marketingzwecke nicht mehr. Löschen Sie daher zuerst die Zuordnungen und danach das Interesse selbst.

Transkript

Wir beginnen nun unseren dritten und letzten Übungsteil zum Thema "DML". Es geht jetzt um die Delete-Anweisung, um das Löschen von Datensätzen. Beim Löschen von Datensätzen kann man in der Praxis am meisten Schaden anrichten, deswegen macht es hier besonders viel Sinn, wenn man wirklich weiß, was man tut. Deshalb auch hier den Tipp: Verwenden Sie das Löschen immer in Kombination mit einer Transaktion, denn dann können Sie Fehler gegebenenfalls noch rückgängig machen. Wir starten mit folgender Aufgabenstellung: Die Sportartikel, die wir in der Tabelle "Interessen" mit dem Kürzel "SPO" und der Bezeichnung "Sportartikel" vorfinden, werden nicht mehr benötigt. Daher soll dieses Interesse aus der Tabelle gelöscht werden. Da es aber Zuordnungen dieses Interesses zu Kunden in der Tabelle "Kundeninteressen" gibt, müssen diese zuerst gelöscht werden. Denn sonst würden wir Fehler aufgrund der referenziellen Integrität bekommen. Das heißt, wir müssen zuerst in der Tabelle "Kundeninteressen" die Einträge löschen, um danach dasselbe in der Tabelle "Interessen" durchzuführen. Noch ein Tipp: Achten Sie darauf, wenn Sie mit Oracle die Aufgabenstellung lösen, dass Groß-/Kleinschreibung bei Texten relevant ist. Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind, fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Betrachten wir uns nun gleich einmal die Lösung unter Oracle. Mit diesen zwei Anweisungen habe ich vorerst einmal nur die Interessen nochmal ausgegeben, damit wir einen Überblick bekommen. Es macht immer Sinn, bei Löschvorgängen vorher mit entsprechenden Selects noch einmal zu testen, was ich überhaupt löschen würde. Jetzt habe ich hier daher die Anweisung stehen, "SELECT * FROM wawi.kundeninteressen WHERE intcode = 'SPO'", das ist das Kürzel für "Sport". Weil es ein Text ist, wird er unter einfachen Hochkomma gesetzt. Das heißt, ich mache mir einmal einen Überblick und weiß, wir werden jetzt gleich zwei Zeilen löschen. Das ist deshalb wichtig, dass man vorher weiß, wie viele man löschen wird, denn dann weiß man, wenn man eine Meldung bekommt, "so und so viele Zeilen gelöscht" und da passt irgendetwas nicht, dass man die Transaktion vielleicht nochmal zurückrollen sollte. Nun zur eigentlichen Anweisung. Wir müssen zuerst in der Tabelle "Kundeninteressen" löschen, denn Interessen können wir aufgrund der referenziellen Integrität erst im Anschluss löschen. Ich führe diese Anweisung aus und bin bei Oracle vielleicht auf den ersten Blick überrascht, warum jetzt "0 Zeilen gelöscht" worden sind. Wie schon in der Aufgabenstellung erwähnt, sollten Sie bei Oracle immer darauf achten, dass Texte Case Sensitive einzugeben sind. Da das Kürzel in Großbuchstaben in der Tabelle gespeichert ist, finden wir es mit dieser "WHERE"-Klausel und mit und mit kleingeschriebenem Kürzel nicht. Daher ist es besser, entweder arbeiten wir in Großschreibung oder die generell empfohlene Variante ist, mit der "LOWER"- und "UPPER"-Funktion hier zu nivellieren, denn dann ist man unabhängig von der Schreibweise. Ich führe also diese Anweisung aus, wo ich sage, "WHERE LOWER(intcode) = 'spo'" in Kleinbuchstaben geschrieben. Und nun bekomme ich wirklich die Meldung, dass "2 Zeilen gelöscht" worden sind. Nachdem die Zuordnung zu den Interessen gelöscht worden sind, können wir natürlich auch die Interessen selber löschen. Ich verwende hier die gleiche Variante mit der "LOWER"-Funktion bei Oracle, um unabhängig von der Groß-/Kleinschreibung zu sein und führe auch diese Anweisung nun aus. "1 Zeile gelöscht" bekommen wir zurückgemeldet. Wir können jetzt davon ausgehen, dass die Zeilen gelöscht sind, aber dennoch werfen wir einen Kontrollblick in die Tabelle, indem ich einerseits hier in der Interessentabelle sehe, dass hier wirklich keine Einträge mehr vorhanden sind, als auch bei den Kundeninteressen kann es hier natürlich keine Werte mehr geben. Nachdem das in Ordnung ist und wenn ich sage, ich will das jetzt wirklich endgültig löschen, kann ich die Transaktion mit einem "COMMIT" bestätigen und damit sind die Änderungen festgeschrieben und können nicht mehr rückgängig gemacht werden. Betrachten wir uns nun die Lösung unter MySQL. Prinzipiell ist die Lösung so ähnlich, wir finden auch hier dieselben Einträge in der Tabelle "Interessen": Der Eintrag SPO für Sportartikel und die zwei Zuordnungen zu den Kunden, 125 und 140 in der Tabelle "Kundeninteressen". Auch hier verwenden wir die Delete-Anweisung, um diese zu löschen. Zuerst löschen wir aus den "Kundeninteressen". Wir sehen, zwei Zeilen wurden gelöscht. Danach folgen die "Interessen", die Reihenfolge ist sehr wichtig wegen der referenziellen Integrität, und auch hier bekommen wir die Meldung "1 Zeile gelöscht". Nun noch die Kontrolle in den beiden Tabellen. Und auch hier sehen wir, keine Einträge sind mehr vorhanden. Sofern uns das passt, können wir mit einem "COMMIT" die Anweisungen bestätigen und die Änderungen festschreiben. Die Groß-/Kleinschreibung hat hier keine so große Rolle gespielt, da bei der standardmäßig verwendeten Collation Groß-/Kleinschreibung unter MySQL nicht relevant ist. Dieselbe Lösung finden wir auch hier beim Microsoft SQL Server vor, die identen Anweisungen. Hier müssen wir gegebenenfalls explizit eine Transaktion mit "BEGIN TRANSACTION" starten, wenn wir es rückgängig machen möchten. Ich führe gleich beide Löschanweisungen gemeinsam aus, die Kontrolle. Sie sehen, die Anweisungen sind absolut ident zu MySQL. Und mit einem "COMMIT" bestätige ich die Transaktion und schreibe die Änderungen fest. Wenn wir Datensätze löschen, müssen wir also sehr genau aufpassen, was wir in die "WHERE"-Klausel schreiben. Es macht immer Sinn, bevor wir löschen vielleicht mit derselben "WHERE"-Klausel ein "SELECT" abzusetzen, um sich die Daten, die man danach löschen wird, noch einmal anzusehen. Achten Sie darauf, dass Sie bei Oracle unter Umständen die "LOWER"-Funktion einsetzen, damit Sie unabhängig von Groß-/Kleinschreibung sind.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

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!