von RobertG » Mi, 17.08.2016 10:00
Hallo Peter,
das, was Du beschreibst, ist ein Missverständnis des Autowertes, dem sehr viele Anwender erliegen. Der Autowert ist nicht dazu gedacht, die Datensätze lückenlos durch zu nummerieren, sondern einfach nur jedem Datensatz ein einzigartiges Merkmal in Form einer Zahl zu verpassen. Unterschiedliche Datenbanken haben hier auch erst einmal unterschiedliche Startwerte implementiert. In der Standardeinstellung startet die internen HSQLDB den Autowert mit '0', MySQL z.B. startet mit '1'.
Was machst Du mit der Nummerierung, wenn ein Datensatz gelöscht wird? Dann fehlt zwischendurch eine Nummer und die Gesamtanzahl stimmt natürlich nicht mehr mit der Zahl des Autowertes überein. Vor allem beim Erstellen von Datenbanken geschieht es sehr häufig, dass Datensätze wieder gelöscht werden. Dann fehlen plötzlich sehr viele Werte zwischendurch. Und wieder hechelst Du dem hinterher, die Nummerierung mit der Anzahl in Übereinstimmung zu bekommen.
Was ist möglich?
Code: Alles auswählen
ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>
Du kannst den Startwert für die nächste Eingabe festlegen. Das bringt aber nur etwas, wenn Du Datensätze am Schluss einer Tabelle gelöscht hast. So etwas setze ich ein, wenn ich beim Aufbau einer Datenbank mit Dummydatensätzen gespielt habe und jetzt die Datenbank richtig nutzen will. Dann setze ich den neuen Feldwert auf '1' und meine Zählung beginnt mit '1'.
Das ganze geht auch über ein Makro gegebenenfalls für alle Tabellen automatisch. Siehe dazu im Handbuch im Kapitel "Makros" das Unterkapitel "Tabellenindex heruntersetzen ...".
Das alles beseitigt aber nicht das Problem, das Du hast, wenn Du zwischendurch Datensätze löscht.
Code: Alles auswählen
SELECT "ID", ( SELECT COUNT( "ID" ) FROM "Tabelle" WHERE "ID" <= "a"."ID" ) AS "lfdNr." FROM "Tabelle" AS "a"
Das Feld "ID" hat den Autowert. Durch die Abfrage wird im darauffolgenden Feld "lfdNr." eine durchgängig laufende Nummer von 1 an aufsteigend angezeigt. Du erhältst eine genaue Übersicht über die Anzahl der Datensätze. Details dazu sind ebenfalls im Handbuch zu finden: Kapitel "Datenbank-Aufgaben", Unterkapitel "Codeschnipsel" > "Zeilennummerierung".
Gruß
Robert
Hallo Peter,
das, was Du beschreibst, ist ein Missverständnis des Autowertes, dem sehr viele Anwender erliegen. Der Autowert ist nicht dazu gedacht, die Datensätze lückenlos durch zu nummerieren, sondern einfach nur jedem Datensatz ein einzigartiges Merkmal in Form einer Zahl zu verpassen. Unterschiedliche Datenbanken haben hier auch erst einmal unterschiedliche Startwerte implementiert. In der Standardeinstellung startet die internen HSQLDB den Autowert mit '0', MySQL z.B. startet mit '1'.
Was machst Du mit der Nummerierung, wenn ein Datensatz gelöscht wird? Dann fehlt zwischendurch eine Nummer und die Gesamtanzahl stimmt natürlich nicht mehr mit der Zahl des Autowertes überein. Vor allem beim Erstellen von Datenbanken geschieht es sehr häufig, dass Datensätze wieder gelöscht werden. Dann fehlen plötzlich sehr viele Werte zwischendurch. Und wieder hechelst Du dem hinterher, die Nummerierung mit der Anzahl in Übereinstimmung zu bekommen.
Was ist möglich?
[code]ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>[/code]
Du kannst den Startwert für die nächste Eingabe festlegen. Das bringt aber nur etwas, wenn Du Datensätze am Schluss einer Tabelle gelöscht hast. So etwas setze ich ein, wenn ich beim Aufbau einer Datenbank mit Dummydatensätzen gespielt habe und jetzt die Datenbank richtig nutzen will. Dann setze ich den neuen Feldwert auf '1' und meine Zählung beginnt mit '1'.
Das ganze geht auch über ein Makro gegebenenfalls für alle Tabellen automatisch. Siehe dazu im Handbuch im Kapitel "Makros" das Unterkapitel "Tabellenindex heruntersetzen ...".
Das alles beseitigt aber nicht das Problem, das Du hast, wenn Du zwischendurch Datensätze löscht.
[code]SELECT "ID", ( SELECT COUNT( "ID" ) FROM "Tabelle" WHERE "ID" <= "a"."ID" ) AS "lfdNr." FROM "Tabelle" AS "a"[/code]
Das Feld "ID" hat den Autowert. Durch die Abfrage wird im darauffolgenden Feld "lfdNr." eine durchgängig laufende Nummer von 1 an aufsteigend angezeigt. Du erhältst eine genaue Übersicht über die Anzahl der Datensätze. Details dazu sind ebenfalls im Handbuch zu finden: Kapitel "Datenbank-Aufgaben", Unterkapitel "Codeschnipsel" > "Zeilennummerierung".
Gruß
Robert