Hallo,
ich habe eine Frage zu MySQL.
Ich habe eine Tabelle mit vielen Einträgen, die als Primary-Key das Feld "id" mit der Funktion "auto_increment" besitzen.
Wenn ich jetzt den letzten Eintrag lösche, so wird, sofern ich einen neuen Eintrag erstelle, nicht die id des gelöschten Beitrags verwendet, sondern die nächste ID und ich habe eine Lücke in meiner Tabelle.
Das ist zwar nicht so schlimm, es stört aber doch.
Gibt es eine Funktion in MySQL, die den nächsten Wert für ein Feld mit der Besonderheit "auto_increment" neu berechnet oder muss ich das mit einem Skript und einer kleinen Abfrage nach der letzten ID machen bzw. wie kann ich den nächsten Wert für "auto_increment" setzen.
Vielen Dank!
Gruß, stefanra
Seite 1 von 1
Mysql Auto_increment
Anzeige
#2
geschrieben 03. November 2004 - 17:01
Nein das funktioniert leider nicht.
Zitat
Der Grund warum 'autoincrement' (es steckt ja schon im Namen) keine Lücken schließt liegt einfach in der möglichen Referenzierung. Insbesondere, da MySQL keine referenzielle Integrität behandelt, kann er nicht einfach anfangen und 'verbrauchte IDs' neu vergeben. Denn MySQL weiß ja nicht, welche anderen Datensätze evtl noch an diese ID gebunden sind. Größere DBs wie z.B. Oracle können dies. Tun es aber auch nicht.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
#4 _PelzigesWaldtier_
geschrieben 06. November 2004 - 20:32
Etwas wuerde vielleicht gehen...
Wenn du
ausfuehrst, dann setzt er beim naechsten Einfuegen fuer id bei dem hoechsen vorhandenen Wert fuer id fort.
Sprich:
Ich habe einen Datensatz mit id=6 und fuege einen neuen ein, der die id=9 hat. Das kommt daher, da ih vorher etliche Datensaetze geloescht habt. Bla, bla, bla, ... Dann fuehre ich oben gennantes Query aus und fuege einen neuen Datensatz ein (nachdem ich den Testetrag id=9 geloescht habe). Der neue Eintrag hat dann die id=7. So hats bei mir geklappt. Wie man allerdings Luecken zwischen den Eintragen fuellt weiss ich auch nicht.
-PelzigesWaldtier
Wenn du
ALTER TABLE tabelle PACK_KEYS =0 CHECKSUM =0 DELAY_KEY_WRITE =0 AUTO_INCREMENT =0
ausfuehrst, dann setzt er beim naechsten Einfuegen fuer id bei dem hoechsen vorhandenen Wert fuer id fort.
Sprich:
Ich habe einen Datensatz mit id=6 und fuege einen neuen ein, der die id=9 hat. Das kommt daher, da ih vorher etliche Datensaetze geloescht habt. Bla, bla, bla, ... Dann fuehre ich oben gennantes Query aus und fuege einen neuen Datensatz ein (nachdem ich den Testetrag id=9 geloescht habe). Der neue Eintrag hat dann die id=7. So hats bei mir geklappt. Wie man allerdings Luecken zwischen den Eintragen fuellt weiss ich auch nicht.
-PelzigesWaldtier
#5
geschrieben 08. November 2004 - 16:07
@PelzigesWaldtier: Danke für den Tipp.
Habe es inzwischen so umgesetzt und es funktioniert so, wie ich es mir gedacht habe.
Habe es inzwischen so umgesetzt und es funktioniert so, wie ich es mir gedacht habe.
Thema verteilen:
Seite 1 von 1