auto_increment in Sql
xpfreund
- datenbank
Hallo,
also ich habe in meiner Datenbank ein Feld "ID" was als auto_increment bei jedem neuen Datensatz hinzugefügt wird. Kann man diesen Zähler auch wieder zurücksetzen?
ID Feld
1 Daten
2 Daten2
27 Daten3
Also nicht 27 wenn ich Daten3 einfüge, sondern 3. Diese Zahlenveränderung ist aufgetreten, weil ich ab und zu Datenzeilen hinzugefügt, aber auch wieder gelöscht habe und immer wenn ich jetzt einen weiteren Datensatz einfüge, wird bei ID entsprechend ab dem letzten ID-Wert (unabhängig, ob er noch existiert oder nicht) weitergezählt. Was muss man tun, damit er bei einem neuen Datensatz mit ID = 3 weitermacht?
gruß aus Hosena
Moin!
Also generell kannste den Auto-increment-Wert mit dem Befehl:
ALTER TABLE tabelle AUTO_INCREMENT=zahl
verändern.
ABER:
Du kannst den Wert nicht niedriger setzen, als den höchsten Wert in der Tabelle.
Ansonsten gäb's ja auch ein Problem:
was soll die DB machen, wenn sie die bereits belegten Werte erreicht?
Drum gibt's da ne Sperre.
Bis denn!
Hallo,
Also generell kannste den Auto-increment-Wert mit dem Befehl:
ALTER TABLE tabelle AUTO_INCREMENT=zahl
verändern.
ABER:
Du kannst den Wert nicht niedriger setzen, als den höchsten Wert in der Tabelle.
Ansonsten gäb's ja auch ein Problem:
was soll die DB machen, wenn sie die bereits belegten Werte erreicht?
Das ist ja das Problem: Die Werte waren belegt, sinds aber nicht mehr.
Drum gibt's da ne Sperre.
Wenn aber nur noch bis 2 existiert und dann aber trotzdem mit 27 weitergezählt wird, obwohl sämtliche bis dorthin existierende Werte gelöscht wurden, dann ist das schon komisch.
gruß aus Hosena
Dann gib der 27 den wert 3 und verwende den Befehl,
um autoincrement auf 4 zu setzen, wenn's Dich so stört. :)
Aber solche Lücken sind durchaus normal.
Autoincrement-Werte werden schließlich dazu benutzt, Zeilen eindeutig zu bezeichnen.
Ansonsten könnte es leicht zu unschönen Verwechslungen kommen.
Hallo,
Und wenn ich einfach ab und zu mal deinen Befehl so laufen lasse:
ALTER TABLE tabelle AUTO_INCREMENT=1
Dann sollten die Datensätze immer von 1 bis x, ohne irgendwelche Zwischenräume, bezählt sein.
Danke für deine Hilfe.
gruß aus Hosena
Hi,
Das ist ja das Problem: Die Werte waren belegt, sinds aber nicht mehr.
warum sollte das ein Problem sein? Die ID hat *keine* Bedeutung, die über die IDentifizierbarkeit des Datensatzes hinaus geht. Ob sie nun 3 lautet, 17, 3.14159 oder Flubberhase, spielt nicht die geringste Rolle.
Cheatah
Hallo,
warum sollte das ein Problem sein? Die ID hat *keine* Bedeutung, die über die IDentifizierbarkeit des Datensatzes hinaus geht. Ob sie nun 3 lautet, 17, 3.14159 oder Flubberhase, spielt nicht die geringste Rolle.
Wie ich soeben gesagt hab, ich empfinde das als Schönheitsfehler.
PS: Nicht so viel cheaten. Ist nicht gern gesehen in Spielerkreisen. (:
Nimms mir nich krumm, sollte ein Witz sein. *lach*
gruß aus Hosena
Hi,
Wie ich soeben gesagt hab, ich empfinde das als Schönheitsfehler.
trenne Dich vor diesem Fehlurteil.
PS: Nicht so viel cheaten. Ist nicht gern gesehen in Spielerkreisen. (:
Nimms mir nich krumm, sollte ein Witz sein. *lach*
Don't panic. Den Nickname hatte ich schon, bevor ich wirklich wusste, was "to cheat" bedeutet :-)
Cheatah
Hallo,
Also man kann doch über "show table status" sich anzeigen lassen, wieviele Datensätze in der Tabelle momentan existieren. Wenn man also die Zahl der Datenreihen in Tabelle y über diesen Befehl abfragen könnte und in einen string (sagen wir $reihenzahl) speichern würde, könnte man dann vor dem Einfügen ALTER TABLE y AUTO_INCREMENT=$reihenzahl +1 laufen lassen, so würden nur Abstände entstehen, wenn z. B. 1 - 12 da sind und z. B. die 8 gelöscht wird. Aber zwischen 12 und x wäre kein Abstand mehr. Mir gehts hier nur um den Schönheitsfehler, also nichts anderes.
gruß aus Hosena
Hallo,
Habs jetzt so gelöst:
<code lang=sql>
$neu = mysql_query("SELECT ID FROM termine");
$num_rows = mysql_num_rows($neu);
$datensatz = $num_rows + 2;
$ok = db_query("ALTER TABLE termine AUTO_INCREMENT=$datensatz");
<code>
+2 weil die Reihenzählung bei 0 beginnt, der ID-Wert aber erst bei 1
Danke für eure Hilfe!
gruß aus Hosena
Habs jetzt so gelöst:
Kein Mensch würde das so machen. Das ist Murks.
Struppi.
Hallo,
Da da das eh nur in unserem Intranet läuft, stört ein Datenbankzugriff mehr oder weniger sowieso nicht.
gruß aus Hosena
Da da das eh nur in unserem Intranet läuft, stört ein Datenbankzugriff mehr oder weniger sowieso nicht.
Davon hat auch keiner gesprochen.
Es geht darum wozu ein autoincrement Wert gedacht ist und wozu du ihn verwenden willst, das ist Murks.
Zumal du ja nicht nur einen Zugriff hast, sondern du änderst die komplette Struktur der Tabelle, ein ALTER ist immer eine teure Angelegeneheit, da ja die komplette Tabelle und alle Indexdateieen neu geschrieben werden müssen.
Struppi.
Mir gehts hier nur um den Schönheitsfehler, also nichts anderes.
Wie dir schon mehrmalks geagt wurde, es ist kein Schönheitsfehler. Eine eindeutige ID und das ist das was du mit einem autoincrement Wert erreichen willst, sagt nichts über die Reihenfolge der Datensätze aus, sondern dienen lediglich zur eindeutigen Identifizierbarkeit. Lücken in solchen Werten sind eine völlig normale Sache. Dein Wunsch deutet auf einen Denkfehler in deinem Programm hin, versuch es anders zu lösen.
Struppi.