insert & id problem

polar

Mitglied
moin,

von php aus schreibe ich werte in eine tabelle (datum, name, text)
ganz vorne hab ich meine id spalte, id hat den primärschlüssel und steht auf auto_increment. einige beiträge sind schon in der tabelle gespeichert. ein paar neue test einträge von mir habe ich gelöscht, zusätzlich habe ich die id's aufgeräumt (sortiert). jetzt hab ich das problem das neue beiträge mit einer falschen id gespeichert werden. es sind zb. 8 beiträge vorhanden. ein neuer beitrag wird aber mit id 29 gespeichert.

..und ich hab ka warum =)
 
das ist das problem bei auto_increment-feldern: die zählen sich zwar von alleine hoch, aber wenn man datensätze am ende der tabelle löscht, dann wird nicht mehr sauber durchnummeriert. wenn z.b. der letzte datensatz die id 8 hat und gelöscht wird, dann ist die höchste id logischerweise 7. legt man einen neuen datensatz an, erhöht sich das auto_increment-feld auf 9.
da scheint irgendwo im datenbanksystem die 8 noch als höchster index zu stehen. das problem gibt es aber in jedem datenbanksystem, mit dem ich bis jetzt zu tun hatte.

aus dem grund sollte man sich seine primärschlüssel immer selber bauen. lieber etwas mehr programmieraufwand aber dafür auf der sicheren seite. ;)
 
also du meinst ich könnte einfach noch eine spalte mit werten davorhauen und diese dann anstelle der id spalte als primärschlüssel verwenden? ..geh erstmal schlafen :) n8
 
jup, mach id ohne autoincrement
Ich definiere die ID immer anhand von time(), das is bei normalen anwendungen praktisch:

PHP:
$id = time();

time() gibt die zeit seit dem beginn des Unix Zeitalters in sekunden zurück und so ist es eigentlich einmalig....

Hoffe geholfen zu haben :)

Neo
 
eine sekunde ist meiner meinung nach schon wieder etwas zu ungenau, millisekunden wären angebrachter. in einer sekunde können schonmal zwei datenbankeinträge gemacht werden, dann wären doppelte primärschlüssel in der tabelle - und das geht ja nicht.
ich hol mir immer zuerst die bisher höchste id aus der tabelle und addier dann eins dazu. dadurch entstehen zwar auch lücken, aber das ist wirklich eindeutig, weil der datensatz innerhalb von ein paar millisekunden in die tabelle eingetragen ist.

eine andere möglichkeit wäre, dass du transaktionen benutzt, um das eintragen zu verhindern, falls die id doch schon in der tabelle stehen sollte. aber das gibt es bei mysql wahrscheinlich nicht, oder? :rolleyes:
 

Neue Beiträge

Zurück