Base: ID aktualisieren, erneuern, erneut zuweisen

Hallo, liebe LO-Freunde,

wenn in einer Datenbank immer wieder Datensätze gelöscht werden und welche hinzukommen, stimmt es am Ende mit der ID nicht mehr hin. Man weiß nicht, wie viele Einträge es letztlich sind.

Frage: Wie kann ich die IDs neu zuweisen, sodass sie der tatsächlichen Menge der Datensätze entsprechen.

Danke schon einmal!
Schöne Grüße
Henri

Die ID (Primärschlüsselwert) ist nur dann ein Indikator für die Anzahl der Datensätze, wenn

  1. die Zählung mit 1 beginnt
  2. für jeden gelöschten Datensatz sofort ein neuer Datensatz mit der entsprechenden ID eingetragen wird

Den Beginn kannst Du ja noch steuern, das Eintragen eines neuen Datensatzes direkt nach der Löschung eines alten Datensatzes aber nicht.

Ich habe mir zu Anfang auch darüber Gedanken gemacht, weil die Nutzer einer Bibliotheksdatenbank unbedingt über die ID sehen wollten, wie viele Medien in der Datenbank verzeichnet sind. Das funktionierte dann so, dass zuerst immer die Lücken ausgefüllt wurden - ein mühsames Geschäft, nur mit Makros hin zu bekommen und natürlich stimmte die letzte ID in der Regel nicht, weil eben mehrere Lücken noch frei waren. Noch schlimmer war dann, dass es sich bei der ursprünglichen Datenbank um MyISAM-Tabellen von MySQL handelte. Ich musste also mit der Programmierung dafür sorgen, dass die Integrität der Daten auch beim Löschen gewährleistet wurde.

Ich würde das Problem so lösen, wie ich das auch im Handbuch beschrieben habe:

SELECT ( SELECT COUNT( “ID” ) FROM “Tabelle” WHERE “ID” <= “a”.“ID” ) AS “lfdNr.”, “a”.*

FROM “Tabelle” AS “a”

Mit der Unterabfrage zählst Du die Zeilen. Zeigt Dir immer die Zeile an, auf der Du Dich in der Abfrage befindest - wie eben die Datensatzzahl, die ebot in seinem Beitrag zeigt.

Danke für den Vorschlag.
Die DB ist recht überschaubar (etwas über 100 Abonnentendaten, nach Name geordnet). Die Abgänge werden sofort gelöscht - also keine Leerzeilen. Jedoch macht es mir wenig Sinn, für die Neuzugänge die freigewordenen IDs zu verwenden, da die IDs der alphabetischen Sortierung nach Zunamen entsprechen soll. Ich suche eben nicht nur einen Abfrage sondern die Möglichkeit eine Neuzuweisung.

Du möchtest also bei einer Eingabe alle IDs so anpassen, dass die alphabetische Sortierung dabei heraus kommt? Warum nutzt Du nicht gleich die Zunamen als Primärschlüssel, wenn doch Deine Datenbank so klein ist? Vermutlich besteht die Datenbank ja nur aus einer Tabelle, oder?

Leerzeilen entstehen ja bei meiner obigen Beschreibung auch nicht. Da sind dann nur Lücken bei der (numerischen) ID, wenn Daten gelöscht werden.

Automatisch erstellte IDs kannst Du mit

ALTER TABLE "Tabellenname" ALTER COLUMN "ID" RESTART WITH '42';

über Extras > SQL z.B. auf den Wert ‘42’ setzen, nachdem am Schluss alle Werte über 41 gelöscht wurden. Trifft aber nur auf die interne HSQLDB zu. Siehe Handbuch Base.

Hi Henri, das Zurückstellen der ID ist eine Möglichkeit zu erfahren, wieviele Datensätze vorhanden sind. Dies trifft aber nur zu, solange nicht wieder Datensäte gelöscht werden. Wieviele Datensätze z.B. in einer Tabelle vorhanden sind, siehst du auch, wenn Du die Tabelle öffnest am unteren Rand. Klicke auf das Symbol “letzter Datensatz” und Dir wird die Gesamtzahl der Datensätze angzeigt.

Bildbeschreibung

EDIT_1 20190203-08.15h

Alternativ besteht die Möglichkeit auch eine Abfrage mit der Funktion “Anzahl” zu erstellen, dies sollte auch im Handbuch von @RobertG stehen.

Danke ebot. Kannst Du mir sagen, wie ich die ID zurückstelle oder wo das beschrieben ist?

Ich selber habe es bisher noch nicht gebraucht. Es sollte aber im Handbuch “Base” von @RobertG stehen. Siehe auch den Kommentar von @RobertG.