AUTO_INCREMENT erhöht den Wert eines Feldes nach einfügen eines neuen
Datensatzes um 1. Beim löschen eines Datensatzes steht der Feldwert wieder
zur Verfügung und wird ein neuer Datensatz eingefügt wird er an der Stelle
des zuvor gelöschten Datensatzes eingefügt.
Ich möchte aber, dass wenn ein Datensatz gelöscht wird z.B. mit dem Feldwert
3, dass der Feldwert des folgende Datensatzes nicht mehr 4 ist, sondern 3
und bei einfügen eines neuen Datensatzes er an das Ende der Tabelle angefügt
wird.
CREATE TABLE TableName (
Projekt_Nr BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY...
Was muss ich hier ändern ?
An der Tabelle selbst kannst du nichts ändern. Du könntest eine Neunummerierung vornehmen, nachdem du etwas gelöscht hast:
DELETE FROM tabelle WHERE id=3;
UPDATE tabelle SET id=id-1 WHERE id>3;
Verursacht natürlich einen Riesen-Aufwand, weil ziemlich viele Datensätze bearbeitet werden müßten. Und ich kann mir nicht vorstellen, daß du dein Problem nur mit der Datenbank lösen kannst.
Üblicherweise kannst du bei auto_increment-Feldern davon ausgehen, daß sie sich aufsteigend sortieren lassen. Als eindeutiger Schlüssel der Tabelle also ziemlich gut verwendbar. Aber nicht zum durchnumerieren von Tabellenausgaben. Für sowas solltest du lieber im Skript, welches die Datenbank abfragt und die HTML-Ausgabe erledigt, eine Variable definieren und nach jedem ausgegebenen Datensatz um eins erhöhen. Diese Zahlenangabe ist dann also nicht fest mit den Datensätzen verknüpft, sondern hat nur "optische" Wirkung, aber das ist für eine laufende Nummer sowieso ideal.
Wenn du die eindeutige ID nämlich änderst, dann müßtest du auch alle anderen Tabellen, die sich auf diese ID beziehen, mitändern etc. Das ist ein ziemlicher Aufwand und spricht dafür, daß das Datenbankdesign überarbeitungswürdig ist.
Eventuell ist es auch drin, im SELECT-Statement eine Pseudo-Spalte anzulegen, die sich automatisch selbst hochzählt. Wäre von der Wirkung her aber identisch mit der Zählvariablen im Skript, von daher eigentlich nur belastendes Zeugs für die Datenbank.
- Sven Rautenberg