Mehrfache Sequenzen mit AUTO_INCREMENT

Mehrfache Sequenzen mit AUTO_INCREMENT

Mehrfache Sequenzen mit AUTO_INCREMENT zu erstellen, ist mithilfe der Datenbank-Engine MyISAM kein Problem. InnoDB gestattet dies nicht. Dennoch gibt es eine einfache Lösung für das Problem.

Problemstellung

Um die Problemstellung klar verständlich zu machen, wähle ich ein einfaches Beispiel. Nehmen Sie an, Sie wollten für eine von Ihnen erstellte Software ein Online-Portal erstellen, in welchem Anwender festgestellte Bugs melden können. Sie haben Kategorien gebildet, denen die gemeldeten Bugs zugeordnet werden sollen. Innerhalb einer Kategorie sollen die Meldungen durchnummeriert werden.

Zugegeben, es sind nur drei Datensätze. Das Prinzip wird aber deutlich. In der Kategorie Grafikkarte sind im Beispiel zwei Fehler gemeldet worden, die mit einer laufenden Nummer versehen sind. In der Kategorie Sound wurde nur ein Fehler gemeldet.

Mehrfache Sequenzen mit AUTO_INCREMENT

Die Datenbank-Engine MyISAM, die in vergangenen Zeiten die Standard-Engine von MySQL war, bietet für die Aufgabenstellung eine einfache Lösung. Man kann das zu nummerierende Datenfeld einfach mit AUTO_INCREMENT vereinbaren. Dabei ist lediglich dessen Positionierung im Primärschlüssel zu beachten. Das zu nummerierende Feld muss nach den kategorisierenden Feldern stehen. Im Beispiel ist das nur ein Feld, es dürfen aber auch mehrere sein.

Üblicherweise wird die Kategorie mittels eines Fremdschlüssels auf eine Master-Tabelle verweisen. Das habe ich mir hier geschenkt. Beachten Sie, die Felder in der Tabellendefinition beliebig anordnen zu können. Um mehrfache Sequenzen mit AUTO_INCREMENT zu erzeugen, ist einzig die Feldreihenfolge in der Primärschlüsseldefinition entscheidend.

Fügen wir die oben gezeigten Datensätze in die Tabelle ein.

Dann erhalten wir mit folgender Abfrage das eingangs dargestellte Ergebnis.

Nachteilig an der Wahl von MyISAM als Datenbank-Engine ist jedoch, die Vorteile von InnoDB nicht nutzen zu können. Ganz trivial können Sie keine Fremdschlüsselbeziehung zu einer Kategorietabelle definieren. Umgekehrt präsentiert Ihnen MySQL eine Fehlermeldung, wenn Sie InnoDB als Datenbank-Engine für die Tabelle nutzen wollen. Dabei geben Sie statt MyISAM InnoDB an oder lassen die Klausel weg. Bei aktuellen Standard-Installationen von MySQL ist InnoDB die Standard-Datenbank-Engine.

Dumm gelaufen könnte man nun denken. Es gibt jedoch eine einfache Lösung mithilfe von Triggern, die ich Ihnen im Folgenden vorstellen möchte.

Mehrfache Sequenzen ohne AUTO_INCREMENT

Da AUTO_INCREMENT bei der Verwendung von InnoDB nur dann möglich ist, wenn das betreffende Feld alleinig den Primärschlüssel bildet, muss eine andere Lösung her. Die Lösung ist ein Trigger.

Fügen Sie die obigen Datensätze in diese Tabelle ein, so erhalten Sie die gleiche Nummerierung, entsprechend den Kategorien, wie bei der Lösung mit MyISAM und AUTO_INCREMENT. Das Verhalten ist jedoch im Vergleich zu AUTO_INCREMENT insofern anders, als das die letzte vergebene Nummer innerhalb einer Kategorie erneut vergibt, wenn der betreffende letzte Datensatz gelöscht wurde. Damit kann man aber, wie ich meine, problemlos leben. Das gewünschte Grundprizip bleibt ja erhalten.

Fazit

Mehrfache Sequenzen mit AUTO_INCREMENT zu erstellen ist einfach, erfordern aber die Datenbank-Engine MyISAM. Für InnoDB die Standard-Datenbank-Engine, welche die meisten Entwickler aus guten Gründen bevorzugen, gibt es eine einfache Lösung, denselben Effekt mittels eines entsprechenden Triggers zu implementieren.

Karsten Brodmann

Karsten Brodmann hat an der Universität Osnabrück BWL/Wirtschaftsinformatik studiert. Er hat viele Jahre in der IT gearbeitet und dort Web- und Datenbankanwendungen entwickelt. Seit Gründung der Punkt-Akademie veröffentlicht Karsten Brodmann auch Schulungsvideos zur Datenbankentwicklung, Unix und Programmierung bei Udemy. In seiner Freizeit fotografiert Karsten Brodmann gerne. Seit vielen Jahren fotografiert er analog und digital. Dabei behält er jeweils den gesamten Workflow in der eigenen Hand, von der Aufnahme über die Dunkelkammer oder auch den Scanner sowie die Bildbearbeitung und den Ausdruck am PC.

Weitere Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.