Kai: Startwert für Autoincrement setzen

Hallo,

kann ich bei einer mysql-DB den Startwert für eine Autoincrement bei Erstellung der Tabelle mit festlegen? Z. B. wenn ich bei 1000 anfangen möchte und von dort immer einen hoch zähle.

Viele Grüße

Kai

  1. Hallo Kai,

    kann ich bei einer mysql-DB den Startwert für eine Autoincrement bei Erstellung der Tabelle mit festlegen?

    nein, auto_increment fängt bei 1 an. (siehe http://www.mysql.de/doc/de/CREATE_TABLE.html)

    Z. B. wenn ich bei 1000 anfangen möchte und von dort immer einen hoch zähle.

    dann musst du 999 Datensätze anlegen und wieder löschen, dann hat der nächste in der betreffenden Spalte 1000 stehen - ich weiß nur nicht, für was das gut sein soll...

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. »»ich weiß nur nicht, für was das gut sein soll...
      das sehe ich genauso,

      allerdings wenn ich eine leere tabelle erstelle und als erstes nur in den index den wert 1000 eintrage ist der nächste autoincrement wert bei mir 1001.
      vielleicht  ein fehler in meiner db.

      mfg
      andreas

      1. Hallo andreas,

        allerdings wenn ich eine leere tabelle erstelle und als erstes nur in den index den wert 1000 eintrage ist der nächste autoincrement wert bei mir 1001.

        stimmt, das funktioniert auch (siehe auch den 2. Link im Posting von annA) - nur muss man beim manuellen setzen der Werte aufpassen, dass man keine erwischt, der schon vorhanden ist.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hello,

          stimmt, das funktioniert auch (siehe auch den 2. Link im Posting von annA) - nur muss man beim manuellen setzen der Werte aufpassen, dass man keine erwischt, der schon vorhanden ist.

          Wenn man den Autoincrement auch als Unique angelegt hat (->Primärschlüssel), dann geht das gar nicht *bätsch*

          Gibt bei Insert dann einen duplicate key error.

          Grüße

          Tom

    2. Na ja, dass das eigentlich keinen Sinn macht ist schon klar. Ich hätte es gebraucht um Artikelnummern zu generieren. Der für den ich das mache, will aber nicht, dass sie bei 1 sondern bei 1000 starten und zerofill wäre auch nichts zumal ich dieses Feld nicht auf 4 Zahlen begrenzen will.

      1. hi,

        Na ja, dass das eigentlich keinen Sinn macht ist schon klar. Ich hätte es gebraucht um Artikelnummern zu generieren. Der für den ich das mache, will aber nicht, dass sie bei 1 sondern bei 1000 starten und zerofill wäre auch nichts zumal ich dieses Feld nicht auf 4 Zahlen begrenzen will.

        dann hat der jenige den unterschied zwischen den daten im hintergrund und den werten, die man sich anzeigen lässt, noch nicht verstanden.

        den wert in der DB bei 0 oder 1 starten zu lassen, und bei der _ausgabe_ 1000 drauf zu addieren, ist üblich.
        aber den wert in der DB bei 1000 zu starten, ist sinnfrei.

        gruss,
        wahsaga

        1. Danke, so habe ich es jetzt auch gemacht. ;-)

        2. Hello,

          dann hat der jenige den unterschied zwischen den daten im hintergrund und den werten, die man sich anzeigen lässt, noch nicht verstanden.

          den wert in der DB bei 0 oder 1 starten zu lassen, und bei der _ausgabe_ 1000 drauf zu addieren, ist üblich.
          aber den wert in der DB bei 1000 zu starten, ist sinnfrei.

          Wohl noch nie was von konjunkten und disjunkten Datenmengen, Mischen, Sortieren, Abspalten ... gehört?

          Kanndoch absolut sinnvoll sein, einen Bereich für spätere Verwendung freizuhalten!

          Grüße

          Tom

          1. hi,

            aber den wert in der DB bei 1000 zu starten, ist sinnfrei.

            Wohl noch nie was von konjunkten und disjunkten Datenmengen, Mischen, Sortieren, Abspalten ... gehört?

            doch.
            aber noch nie, dass so etwas zwingend von einer auto-increment-id von > 1000 abhängig wäre.

            Kanndoch absolut sinnvoll sein, einen Bereich für spätere Verwendung freizuhalten!

            welchen unterschied macht es, ob ich nun bei 1000 anfang, und damit später noch den bereich von 0 - 999 frei habe - oder bei 0 anzufangen, und dann später noch den bereich über "grösster derzeitiger wert" frei zu haben?

            gruss,
            wahsaga

            1. Hello,

              welchen unterschied macht es, ob ich nun bei 1000 anfang, und damit später noch den bereich von 0 - 999 frei habe - oder bei 0 anzufangen, und dann später noch den bereich über "grösster derzeitiger wert" frei zu haben?

              Na ich sag, doch, u hast noch nix von Mischen gehört...
              Aber direktgestreute Dateien kennst Du, oder? Es gibt auch direktgestreute Primärschlüssel ;-)

              Grüße

              Tom

    3. Hello,

      nein, auto_increment fängt bei 1 an. (siehe http://www.mysql.de/doc/de/CREATE_TABLE.html)
      dann musst du 999 Datensätze anlegen und wieder löschen, dann hat der nächste in der betreffenden Spalte 1000 stehen - ich weiß nur nicht, für was das gut sein soll...

      Ist das jetzt Theorie oder Praxis?

      Erfahrungsgemäß macht der Auto-Increment nach dem größten vorhandenen weiter, der jemals drinstand, wenn mindestens ein Datensatz in der DB ist. Löscht man jedoch alle Datensätze, dann fängt er bei 1 wieder an.

      Ob dieses Verhalten allerdings verbrieft ist und was bei Overflow passiert, vermag ich nicht zu sagen. Es ist eben nur Praxiserfahrung.

      Grüße

      Tom

      1. Hallo Tom,

        nein, auto_increment fängt bei 1 an. (siehe http://www.mysql.de/doc/de/CREATE_TABLE.html)
        dann musst du 999 Datensätze anlegen und wieder löschen, dann hat der nächste in der betreffenden Spalte 1000 stehen - ich weiß nur nicht, für was das gut sein soll...
        Ist das jetzt Theorie oder Praxis?

        Theorie - so einen Unfug mach ich nicht :-)

        Erfahrungsgemäß macht der Auto-Increment nach dem größten vorhandenen weiter, der jemals drinstand, wenn mindestens ein Datensatz in der DB ist. Löscht man jedoch alle Datensätze, dann fängt er bei 1 wieder an.

        das kommt darauf an, wie du die Datensätze löschst. Mit "DELETE FROM tabelle" wird auto_increment zurückgesetzt - wenn du aber eine WHERE-Klausel dranhängen hast, wird auto_increment nicht zurückgesetzt (auch wenn alle Datensätze gelöscht werden).

        Ob dieses Verhalten allerdings verbrieft ist und was bei Overflow passiert, vermag ich nicht zu sagen.

        mysql will wieder bei 1 anfangen: http://www.dclp-faq.de/q/q-mysql-inkrement.html (unten)

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hello,

          das kommt darauf an, wie du die Datensätze löschst. Mit "DELETE FROM tabelle" wird auto_increment zurückgesetzt - wenn du aber eine WHERE-Klausel dranhängen hast, wird auto_increment nicht zurückgesetzt (auch wenn alle Datensätze gelöscht werden).

          Fein! Wieder 'was gelernt. Lohnt sich doch immer wieder, reinzuschauen.

          Grüße

          Tom

  2. ja, einfach dein index als erstes auf 1000 setzen und dann ganz
    normal mit insert weitere werte hinzufügen

    mfg
    andreas

  3. Hallo Kai,

    wieso suchst Du denn nicht im Internet (zum Beispiel bei
    http://www.google.de)?

    Da hättest Du zum Beispiel so etwas finden könnne:
    http://www.dclp-faq.de/q/q-mysql-inkrement.html

    Habe es allerdings nicht getestet...

    Gruß
    annA