Frequently asked questions - Base
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Wie kann ich die fortlaufende Nummerierung für einen Primärschlüssel neu starten?
Werden in einer Tabelle Zeilen gelöscht, so entstehen bei numerischen AutoWert-Feldern Lücken in der Zählung. Dies kann besonders dann vorkommen, wenn zuerst testweise Daten eingegeben werden und dann die scheinbar leere Datenbank für die Nutzung freigegeben wird. Die automatische Nummerierung merkt sich den letzten Stand und startet jetzt nicht bei '0', sondern eben beim nächstfolgenden Wert vor der Löschung der Daten. Dies hat keine Auswirkung auf die Nutzbarkeit der Datenbank, kann aber so irritierend sein, dass viele Nutzer hier nach Abhilfe suchen.
Tabellen können zu anderen Tabellen in Beziehung gesetzt sein (Extras > Beziehungen).
Je nach Definition dieser Beziehungen kann es gegebenenfalls Schwierigkeiten geben, eine der folgenden Methoden für die fortlaufende Nummerierung des Primärschlüssel anzuwenden.
Der Primärschlüssel wird als AutoWert erstellt und die Tabelle enthält keine Daten
Führe den folgenden SQL-Befehl für das AutoWert-Primärschlüsselfeld "ID" über das Menü Extras > SQL aus:
ALTER TABLE "Tabelle" ALTER COLUMN "ID" RESTART WITH 1
Dies setzt den Start der Nummerierung auf den Wert '1'.
Die Tabelle enthält bereits Daten
Führe den folgenden SQL-Befehl für das Primärschlüsselfeld "ID" über das Menü Extras > SQL aus. und lasse Dir dabei die Ausgabe der SELECT-Anweisung anzeigen:
UPDATE "Tabelle" AS "a" SET "ID" = (SELECT COUNT("ID") FROM "Tabelle" WHERE "ID" < "a"."ID")
Für einen Primärschlüssel, der über AutoWert weiter automatisch erstellt wird, sind zusätzliche Schritte sinnvoll. Lasse Dir im Menü Extras > SQL dabei die Ausgabe der SELECT-Anweisung anzeigen:
SELECT MAX("ID")+1 FROM "Tabelle"
Füge anschließend die maximale ID in den Befehl
ALTER TABLE "Tabelle" ALTER COLUMN "ID" RESTART WITH ...
ein und führe diesen Befehl aus.
Es wird lediglich eine fortlaufende Nummerierung benötigt
Unabhängig vom Primärschlüssel kann eine fortlaufende Nummerierung erstellt werden. Dies geschieht über eine Abfrage. Erstelle die folgende Abfrage über Abfrage in der SQL-Ansichet erstellen ...:
SELECT "a".*, (SELECT COUNT("ID") FROM "Tabelle" WHERE "ID" <= "a"."ID") AS "lfdNr." FROM "Tabelle" AS "a"
Die Abfrage ist editierbar und hat eine fortlaufende Nummerierung, die sich nach dem Primärschlüsselfeld "ID" richtet.