xpfreund: auto_increment in Sql

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

  1. 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!

    1. 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

      1. 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.

        1. 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

        2. Hallo,

          Achso, das geht also nur bei neuen Datensätzen.
          Dankeschön

          gruß aus Hosena

      2. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. 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

          1. 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

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. 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

    1. 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

      1. Habs jetzt so gelöst:

        Kein Mensch würde das so machen. Das ist Murks.

        Struppi.

        --
        link:http://javascript.jstruebig.de/@title=Javascript ist toll] (Perl auch!)
        1. Hallo,

          Da da das eh nur in unserem Intranet läuft, stört ein Datenbankzugriff mehr oder weniger sowieso nicht.

          gruß aus Hosena

          1. 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.

            --
            Javascript ist toll (Perl auch!)
    2. 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.

      --
      Javascript ist toll (Perl auch!)