Hallöchen,
ich habe folgendes Problem: In meiner Tabelle habe ich ein Feld "KdNr", das folgende Eigenschaften hat: tinyint(3), UNSIGNED ZEROFILL, not null, auto_increment.
Wenn ich jetzt einen neuen Datensatz einfüge z.B. mit der ID 1, dann wird das Feld mit 001 gefüllt. Jetzt habe ich drei Datnsätze und der letzte hat die ID 003. Lösche ich den letzten Datensatz nun, dann wird die ID 003 auch gelöscht.
Füge ich einen Datensatz nun neu ein, dann bekommt er nicht die ID 003, die ja wieder frei sein sollte, sondern die 004.
Was mache ich falsch? Bitte helft mir.
Danke
Mario Heiß
BrainBug
22-03-2001, 16:43
Welche Datenbank hast du überhaupt?
Egal: bei autoincrement gibt's sowas wie einen internen Zähler (bei Oracle speziell in Sequenzen zu definieren) und der wird stetig hochgezählt, d.h. du kannst auch alles löschen per "delete from tabellennamen" und trotzdem geht's bei soundsoviel weiter.
Wenn du eine fortlaufend Zählung willst und trotzdem hinundwieder was löschen möchtest (wozu ist das eigentlich gut???), dann benutze lieber neben dem autoincrement "ID" noch ein extra Feld als "KdNr" das du selbst hochrechnest. Dafür mußt du allerdings auch immer schauen, was dein letzter Eintrag für ein Wert hat.
Löschen mitten raus geht deshalb aber immer noch nicht.
Hallöchen,
sorry habe ich ganz vergessen. Meine Datenbank ist eine mySQL-Datenbank!!!!!!!!!!!!!!!!!!!
vieleb Dank für Deine Antwort. Allerdings habe ich da etwas anderes gelesen. Zitat "PHP 4 + mySQL" (Buch von DataBecker) auf Seite 266 unten:"Das Attribut Auto_Increment bedeutet, daß der Inhalt eines Feldes ... usw. Im Gegensatz zu verschiedenen anderen DBS steht der entsprechende Feldwert beim Löschen des Datensatzes wieder zur Verfügung." Also, dann kann Deine Aussage nicht ganz richtig sein oder die des Autors.
Ich brauche dies für ein Kundenmanagementsystem, in dem ich jedem Kunden eine Kundennummer zuordne. Sollte mich irgendwann ein Kunde nicht mehr beglücken und zur Konkurrenz gehen, dann möchte ich aber die Kundennummer wieder verfügbar haben für einen neuen Kunden.
Also ich brauche immer noch Hilfe!
Vielen Dank
Grüße Mario
[Editiert von MHeiss am 22-03-2001 um 18:48]
Es kommt anscheinend auf die MySQL-Version an. Mein WAMP zuhause zählt normal weiter, der LAMP mit MySQL 3.22.25 hier auf der Arbeit nimmt die höchste belegte Nummer +1.
D.h. wenn aus den Datensätzen 1,2,3,4 die 2 und die 4 gelöscht werden, macht der Server hier beim nächsten Insert mit der 4 weiter, mein heimischer WAMP bei 5.
BrainBug
23-03-2001, 09:40
Ah, interessant. Das war für mich neu. Ich hatte bis jetzt nur mySQL-Versionen, die weitergezählt haben. Vielleicht gibt's dafür auch ne Einstellungsmöglichkeit. Bei mir ist's nämlich immer so, wenn ich sogar die ganze Tabelle leer putze, dann geht die Zählung trotzdem weiter.
Egal, aber für diesen beschriebenen Fall kannst du nicht mit autoincrement als kdNr-Feld arbeiten. Wenn du lückenlos immer die Nummern vergeben möchtest, die mal wieder freiwerden. Denke, daß du das bißchen aufwendiger machen mußt und deinen Datenbestand durchforsten mußt und die erste freie ID dir holst. Sonst wüßte ich keine Lösung.