Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 2: Aufgaben und Lösungen

Lösung zu Beispiel 6 mit MySQL

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In MySQL werden fortlaufende Nummerierungen mit einem Autoinkrement umgesetzt. In der Lösung für das Beispiel 6 sehen Sie es im Einsatz.

Transkript

In diesem Video zeige ich Ihnen, wie Sie in MySQL zur Lösung für das sechste DML-Beispiel kommen. Bei diesem Beispiel geht es ja darum, in die Tabelle "bestellungen" und "bestellpositionen" sowie anschließend in die Tabellen "wareneingang" und "wareneingangspositionen" neue Einträge aufzunehmen. Wir beginnen mit der Bestellung. Um eine neue Bestellung zu erfassen, ist es vollkommen ausreichend, die Lieferantennummer und die Personalnummer des Bearbeiters zu übergeben. Das ist deshalb so, weil die Bestellnummer automatisch vergeben wird. Das ist in der Tabelle als Auto-Inkrement definiert worden. Außerdem sind Standardwerte, Default-Werte für das Bestelldatum als auch den Bestellstatus festgelegt worden. Beide werden daher auch automatisch vergeben. und müssen beim INSERT nicht berücksichtigt werden. Ich führe diese Anweisung also gleich einmal aus, und blende den unteren teil ein. damit wir die Meldung sehen "1 row affected", beim INSERT, das hat gepasst. Nun müssen wir die entsprechenden Bestellpositionen einfügen. Dazu müssen wir wissen, welche Bestellnummer automatisch vergeben worden ist. denn genau diese Nummer müssen wir für die Positionen mitgeben. Jetzt könnten wir natürlich auch hergehen und nachsehen, was ist die höchste Bestellnummer in der Tabelle. Das könnte aber in der Praxis gefährlich sein, denn was ist, wenn andere Benutzer, wenige Sekunden nach uns auch eine Bestellung erfasst haben. und damit bereits weitere, noch höhere Nummern vorhanden sind. Damit könnten wir eine falsche Nummer auslesen. Deshalb verwenden wir unter MySQL die Funktion LAST_INSERT_ID um die zuletzt vergebene Bestellnummer in Form des Auto-Inkrementwertes auszulesen. und das ist die Bestellnummer "1009". und das ist die Bestellnummer "1009". Diese Bestellnummer übernehmen wir nun direkt in die Bestellung. Ich habe hier zwar eine andere Nummer vorbereitet, aber die passe ich hier halt an. Nun führe ich diese Anweisung aus, doch bevor ich das tue, möchte ich mir das Ergebnis einmal ansehen. Ich möchte mir ansehen, was werde ich hier einfügen, markiere deshalb diesen Teil separat und klicke hier auf dieses Symbol, denn dann kann ich mir das Ergebnis vorweg betrachten. Das werden wir einfügen. Es geht jetzt darum, dass wir die vergebene Bestellnummer und ganz wichtig ist es jetzt hier, eine fortlaufende Positionsnummer zu generieren. Die Artikelnummer, die Bezeichnung und der Einkaufspreis werden aus der Artikeltabelle ausgelesen, fix definieren wir "12" als Menge, und "10" als Prozentsatz für den Rabatt. Wie kommen wir nun unter MySQL zu dieser fortlaufenden Nummer? Denn zweite Spalten wir ROWNUM bei Oracle oder die Funktion ROW_NUMBER wie beim SQL Server gibt es hier ja nicht. Dazu müssen wir unter MySQL auf einen kleinen Trick zurückgreifen. Und zwar müssen wir eine entsprechende Variable definieren. Dieser Variable habe ich hier den Namen "@zeile" gegeben. Und über diese Unterabfrage in runder Klammer, die ich als Kreuzprodukt hier in der FROM-Klausel joine, initialisiere ich diese Variable. indem ich ihr den Wert "0"zuweise. Als Tabellen-Aliasnamen habe ich hier "z" vergeben. Da hat zwar keine weitere Bedeutung, steht hier einfach für Zeile. Im SELECT selber muss ich nun darauf achten, dass die Variable pro eingefügter Zeile hinaufgezählt wird. Deshalb gebe ich hier "@zeile := @zeile +1" ein. Und das liefert mir, wie hier im Ergebnis zu sehen, diese fortlaufende Nummerierung. Und damit kann ich jetzt diesen Wert hier einfügen. Ich füge jetzt also hier einmal die Zeilen ein, indem ich die Anweisung ausführe. Ich markiere und drücke die entsprechende Taste und kriege hier, dass sechs Zeilen eingefügt worden sind. Ich kontrolliere das Ergebnis, indem ich für die entsprechende Bestellnummer die vordefinierten Werte nun, die ich eingefügt habe auslese. Wir sehen hier, dass die Bestellnummer vergeben wurde und automatisch auch das Bestelldatum. über einen Default-Wert und Status "1", den mussten wir nicht eingeben bei der Bestellung. Die Bestellpositionen kontrollieren wir nun noch. Und das sind genau die sechs Artikel, mit der Nummer die wir definiert haben, mit den Einkaufspreisen und der entsprechenden Positionsnummer. Wenn Sie also eine fortlaufende Nummerierung unter MySQL definieren möchten, müssen Sie über diesen kleinen Trick mit dieser Variable zurückgreifen. Wenn Sie den zweiten Teil der Aufgabenstellung noch nicht gelöst haben, nämlich das Übernehmen der Bestellung in den Wareneingang, 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 die Lösung für den zweiten Teil der Aufgabenstellung. Wir möchten diese Bestellung als Wareneingang übernehmen. Annahme, der ist geliefert worden und soll eingefügt werden. Dazu muss zuerst in der Tabelle "wareneingang" der Kopf des Wareneingangs eingefügt werden. Lieferant, Lieferscheinnummer und Bearbeiter werden übergeben, Die Wareneingangsnummer wird wieder automatisch über ein Auto-Inkrement eingefügt. Ich führe diese Anweisung aus, lösche hier vorne das Ausgabeergebnis, damit wir besser sehen, welche Meldungen hier zutage kommen Ich starte die Anweisung, und wir sehen jetzt, dass eine Zeile eingefügt worden ist. Wieder lesen wir mit LAST_INSERT_ID die in dem Fall vergebene Wareneingangsnummer aus. Diese Wareneingangsnummer müssen wir jetzt hier übernehmen, für die Eingabe der Positionen. Das habe ich hier schon vorbereitet, das ist die Nummer, die ich erwartet habe. Nicht ganz erwartet habe ich diese Bestellnummer, deshalb bessere ich hier nochmal aus auf "1009". Das heißt wir lesen jetzt hier die einzelnen Positionen der Bestellung aus. Wir können uns vorweg betrachten, was hier herauskommen wird, was hier eingefügt werden wird. Ich markiere die SELECT-Anweisung ohne das INSERT und verwende dieses Symbol im Editor, um mir das Ergebnis hier vorweg anzuzeigen, d. h. genau diese bestellten Artikel. Die Positionsnummer wird auch übernommen, wir ergänzen nur die Wareneingangsnummer, anstelle der Bestellnummer. Nun führe ich die ganze Anweisung aus und sehe nun hier im Ergebnis, dass wir sechs Zeilen eingefügt haben. Wir haben also hier die Positionen übernommen. Als Lager habe ich dabei fix die Nummer "1" für das Lager, übergeben, denn dort sollen die einzelnen Werte zugebucht werden. Zur Kontrolle können wir das Ergebnis hier noch einmal ausgeben, einerseits hier mit einem SELECT auf den Wareneingang, der hier eingefügt wurde, mit aktueller Systemzeit als Datum, und auch die entsprechenden Positionen, die wir eingefügt haben, können wir hier wiederum auslesen. Nachdem das alles gut funktioniert hat und auch passt, können wir die Transaktion mit einem COMMIT abschließen und so endgültig die Daten festschreiben. Sie haben also gesehen, wie wir hier Werte einerseits über eine VALUES-Klausel oder über ein SELECT in eine Tabelle einfügen können und wie wir einen automatisch vergebenen Inkrementwert über die Funktion LAST_INSERT_ID auslesen können.

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!