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

Einfügen mit Auto-Inkrement - MySQL

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
MySQL setzt AUTO_INCREMENT-Spalten für eine automatische fortlaufende Nummerierung ein. Wollen Sie diese einmal nicht nutzen, so fügen Sie ohne Weiteres selber einen Wert in eine solche Spalte ein. Aber Achtung, Sie können damit auch enorme Lücken in die Nummerierung reißen!

Transkript

In diesem Video sehen Sie, wie die Verwendung eines Autoinkrements beim Einfügen von neuen Datensätzen in MySQL implementiert ist. In unserer Beispieldatenbank finden wir ein Autoinkrement für die Bestellnummer in der Bestelltabelle vor. Betrachten wir uns kurz einmal den Inhalt der Tabelle und wir sehen, dass es momentan für die Bestellnummern 1000 bis 1008 eine Lücke gibt, sie allerdings vergeben sind. Wie kann ich nun hier einen Datensatz einfügen? Ich kann nicht so wie beim Microsoft SQL Server die Spalte einfach ignorieren und beim Einfügen ohne Zielspaltenangabe diese weglassen. Diese Variante funktioniert hier nicht, aber ansonsten ist MySQL hier sehr flexibel. Fügen wir also einmal einen neuen Datensatz ein "INSERT INTO wavi.Bestellungen" und wir werden folgende Spalten befüllen: Wir werden das Datum befüllen, die Bestellnummer, die lassen wir jetzt einfach weg. Insofern ignorieren wir sie schon bei der Eingabe, wir befüllen sie nicht. Das ist ähnlich wie bei einem Standardwert, der wird automatisch dann vergeben. Wir vergeben natürlich den Lieferanten, wir vergeben den Bearbeiter und die Bemerkung können wir eigentlich frei lassen. Status sollte mit einem Standardwert "1" vorbelegt sein. Also, VALUES folgen wir nun, das Datum gebe ich im MySQL Standardformat an "2011_08_10", nehmen wir den 10. August 2011. Lieferant eine Nummer, die es gibt "1002" sollte eine gültige Lieferantennummer sein und Bearbeiternummer z.B. "452". Nun führe ich diese Anweisung aus, wir sehen hier keine Fehlermeldung "1 rows affected", D.h. es hat auf diese Art und Weise funktioniert und wir betrachten uns das Ergebnis. Wir sehen jetzt hier am Ende mit der Nummer 1009, die jeweils nächste Nummer vergeben. D.h. bei einem Autoinkrement wird immer die nächste Nummer hier definiert. Was passiert, wenn ich jetzt einen Fehler habe beim Einfügen? Der kann z.B. dadurch bedingt sein, dass ich eine ungültige Lieferantennummer verwende und dadurch eine Fremdschlüsselverletzung hervorrufe. Ich nehme jetzt hier einfach eine Lieferantennummer, von der ich weiß, dass sie nicht existiert, 8888, und versuche den Vorgang jetzt noch einmal. Ich starte diese Anweisung und habe jetzt hier wie erwartet meine Fremdschlüsselverletzung, meine Fehlermeldung, dass dieser Datensatz nicht eingefügt werden konnte. Danach führe ich noch einmal die Anweisung aus, die wir vorher schon einmal erfolgreich ausgeführt haben, das ist die obere von diesen beiden und nun habe ich wieder erfolgreich einen Datensatz eingefügt. Betrachten wir uns nun das Ergebnis in der Tabelle. Wir sehen, dass jetzt hier die Nummer 1010 übersprungen worden ist, also diese Nummer haben wir sozusagen bei unserem nicht erfolgreichen Einfügeversuch verbraucht. Das heißt ein Autoinkrement garantiert mir nur Eindeutigkeit aber keine Lückenlosigkeit. Also in der Praxis sollte ich ihn nicht dann verwenden, wenn Lückenlosigkeit ein Thema ist, wie z.B. bei einer Rechnungsnummer. Allerdings kann ich im Nachhinein solche Lücken auch wieder manuell stopfen. Und zwar geht das bei MySQL ganz simpel und einfach. Ich kann auch in eine als Autoinkrement definierte Spalte jederzeit direkt ohne Probleme etwas eintragen. Z.B. könnte ich jetzt hier die Fehlnummer 1010 einfach hier ergänzen, indem ich diese Anweisung jetzt hier ausführe. Wir sehen, one row affected, das war erfolgreich. Betrachten wir uns das Ergebnis und wir sehen jetzt, dass diese Lücke geschlossen worden ist, in dem Fall nachträglich. Was passiert jetzt aber, wenn ich auf diese Art und Weise manuell einen höheren Wert eintrage in meine Datenbank, z.B. vergebe ich jetzt hier direkt die Bestellnummer 3500 und füge diese Zeile ein. Wir sehen, auch das war erfolgreich. Wir kontrollieren das Ergebnis und wir sehen nun, dass wir eine neue höhere Nummer haben. Was passiert jetzt mit dem Autoinkrement? Es besteht natürlich prinzipiell die Gefahr, wenn jetzt hier mit 1012 weitergearbeitet wird, dass diese Autoinkrementnummer irgendwann von hinten in diese Beständenummer sozusagen hineinläuft und es dann zu einer Primärschlüsselverletzung kommt. Das ist allerdings zum Glück nicht der Fall, denn wenn wir eine höhere Nummer manuell einfügen, dann setzen wir damit zugleich den Zähler hinauf. Das heißt, als Nächstes, beim nächsten Einfügen, wird jetzt nicht die Nummer 10012, sondern die auf 3500 folgende Nummer 3501 vergeben werden. Ich werde das jetzt hier austesten, indem ich diese Anweisung hier, die erfolgreich einen Datensatz einfügt, noch einmal starte. Hat funktioniert. Und kontrollieren wir nun das Ergebnis und wir sehen jetzt, dass all die Nummern, die zwischen diesen beiden liegen ignoriert worden sind, ausgelassen worden sind und jetzt die nächsthöhere Nummer verwendet wird. Selbst sollte ich jetzt manuell hier zwischen neue Nummern einfügen, diese Laufnummer wird nicht mehr zurückgesetzt. Es wird immer der bisher höchstverwendete Wert als Basis verwendet. Sie haben also in diesem Video gesehen, wie Sie bei MySQL einen Datensatz einfügen, wenn für eine Spalte, ein Autoinkrementwert, also eine fortlaufende Nummerierung definiert worden ist. Sie befüllen diese Spalte nicht, denn der Wert wird automatisch vergeben, D.h. Sie geben definitiv explizit keinen Wert für diese Spalte an. Wenn Sie beim Einfügen auf einen Fehler stoßen, durch irgendeine Schlüsselverletzung z.B. und das Einfügen nicht erfolgreich ist, dann werden die Nummern verbraucht und nicht mehr nochmals vergeben. Sie können aber jederzeit manuell explizit einen Wert direkt ohne vorher irgendetwas anderes umstellen zu müssen bei MySQL in so eine Spalte eintragen. Wenn Sie dabei allerdings einen höheren Wert verwenden, werden alle dazwischen liegenden Nummern ausgelassen und Sie setzen damit den Autoinkrementwert hinauf.

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!