gibt es ID update???

Der MySQL Datenbank-Server für Internet- und Intranet-Lösungen.

gibt es ID update???

Beitragvon krolik » Do 14 Mär, 2002 16:06

also, ich hab hier ein kleine frage. da ich sehr pingelich bin wollte ich mal meine datenbank perfektionieren, dabei bin ich auf ein probl. gestossen, auf die ich keine antwort weis, villeicht kann mir jemand helfen, oder versuche ich das Unmögliche :)
also ich habe eine datenbank, in der datenbank sind 4 Spalten mit den namen: "ID", "Name", "beschr", "other". die Spalte "ID" hab ich so erstellt:
creae table bla bla (id int not null primary key AUTO_INCREMENT, name text, bla bla);
die daten die ich einfüge kriegen automatisch eine Ziffer in der Spalte "id". wenn ich eine Zeile lösche zb.: "Zeile mit der id 3 von den 6 Zeilen" und eine neue erstelle dann kriegt die neu erstellte zeile eine höhere nummer als die höchste nummer in der ID spalte, also kriegt die neu erstellte zeile die ID Nr.7 statt der ID Nr. 3.
meine frage: wie kann ich eine tabelle erstellen die automatisch bei einer neuerstellten Zeile die ID Nr. nimmt die noch übrig bleiben bzw. wenn noch vorhanden, wenn nicht dann soll sie weiter die nächst höhere nehmen?
gibts dafür ein befehl, oder ist es unmöglich?
krolik
 

RE: gibt es ID update???

Beitragvon mad » Do 14 Mär, 2002 19:06

<HTML>hallo,

noe geht meines wissens nicht,
is ja auch nicht der sinn hinter auto_increment (sonst wuerds ja get_next_free heissen oder so ;)

auto_increment soll lediglich dazu dienen atomar einen _eindeutigen_ key generieren zu koennen .. d.h. auch wenn zwei client zur gleichen zeit ein insert machen ist garantiert, dass sie unterschiedliche key's (id's) verwenden...

imho .. die einzige moeglichkeit etwas derartiges wie du vorhast zu realisieren,
ist eine art "free-list" zu fuehren; also ein table wo du beim loeschen eines
eintrages die geloeschte id reinhaengst ..
wenn du dann "die-naechste-freie" id brauchst schaust in dem table nach ob eine verfuegbar ist, falls nicht dann nimmst wieder eine mit auto_increment erzeugte ...

dass du damit allerdings eine furchtbare "race-condition" erzeugst (zumindest ohne exzessives table-locking) sollte dir klar sein ...

mfg,
mad.
</HTML>
mad
 


ZurĂĽck zu MySQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 30 Gäste