Fraenk: MySQL auto_increment zurücksetzen

Hallo Forum!

Ich hab tapfer das Archiv durchsucht zu diesem Thema, aber nix brauchbares gefunden.

Gibt es eine Möglichkeit, den Wert von auto_increment, nach dem Löschen des letzten Datensatzes auf 1 zurückzusetzen, ohne die Tabelle zu löschen und wieder neu anzulegen bzw. zu kopieren?

Merci - Fraenk

  1. Hallo Fraenk,

    versuch mal:

    ALTER TABLE tabelle_blah_blah AUTO_INCREMENT = 1;

    HTH Robert

    1. Hallo Robert,

      das funktioniert!!!!

      Merci vielmals! - Fraenk

  2. Hi Fraenk

    Gibt es eine Möglichkeit, den Wert von auto_increment, nach dem Löschen des letzten Datensatzes auf 1 zurückzusetzen, ohne die Tabelle zu löschen und wieder neu anzulegen bzw. zu kopieren?

    Ausschnitt aus http://www.mysql.com/doc/A/L/ALTER_TABLE.html
    An integer column may have the additional attribute AUTO_INCREMENT. When you insert a value of NULL (recommended) or 0 into an AUTO_INCREMENT column, the column is set to value+1, where
    value is the largest value for the column currently in the table. AUTO_INCREMENT sequences begin with 1. See section 8.4.3.126 mysql_insert_id(). If you delete the row containing the maximum
    value for an AUTO_INCREMENT column, the value will be reused with an ISAM, or BDB table but not with a MyISAM or InnoDB table. If you delete all rows in the table with DELETE FROM table_name
    (without a WHERE) in AUTOCOMMIT mode, the sequence starts over for all table types. Note: there can be only one AUTO_INCREMENT column per table, and it must be indexed. MySQL Version 3.23 will
    also only work properly if the AUTO_INCREMENT column only has positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems
    when numbers 'wrap' over from positive to negative and also to ensure that one doesn't accidentally get an AUTO_INCREMENT column that contains 0. In MyISAM and BDB tables you can specify
    AUTO_INCREMENT secondary column in a multi-column key. See section 3.5.9 Using AUTO_INCREMENT. To make MySQL compatible with some ODBC applications, you can find the last inserted row
    with the following query: SELECT * FROM tbl_name WHERE auto_col IS NULL

    Das heisst, alle Records löschen reicht damit es wieder bei 1 anfängt.

    Gruss Daniela

    1. Hi Daniela

      Das heisst, alle Records löschen reicht damit es wieder bei 1 anfängt.

      Reicht leider nicht! Wenn der letzte Datensatz gelöscht wurde, fängt auto_incremet beim ursprünglich höchsten Wert wieder an zu zählen,
      aber Roberts Methode funktioniert!

      Tschö und Danke,
      Fraenk

    2. Hallo Daniela,

      Fraenks Frage zielte auf das AUTO_INCREMENT-Verhalten nach dem Löschen des letzten DS, nicht nach dem Löschen aller DS; das führt nicht in jedem Fall zum Dekrementieren des AUTO_INCREMENT-Wertes:

      "If you delete the row containing the maximum value for an AUTO_INCREMENT column, the value will be reused with an ISAM, or BDB table but not with a MyISAM or InnoDB table."

      HTH Robert

  3. Hallo auch!

    In Vorausschau fiel mir hierzu auch ne Frage ein:
    Vorhaben: Kundendatenbank, Kundennummer mit auto_increment. Ab und an werden ja nunmal wieder Kunden rausgeschmissen. Gibt es ne Möglichkeit (ist es gar die hier im Thread bereits erwähnte?), dass die DB bei jedem Neuanlegen eines Kunden erstmal in aufsteigender Reihenfolge die Kundennummern durchschaut und dann die erste "Lücke" belegt?

    Gruß,
    Miky

    Hallo Forum!

    Ich hab tapfer das Archiv durchsucht zu diesem Thema, aber nix brauchbares gefunden.

    Gibt es eine Möglichkeit, den Wert von auto_increment, nach dem Löschen des letzten Datensatzes auf 1 zurückzusetzen, ohne die Tabelle zu löschen und wieder neu anzulegen bzw. zu kopieren?

    Merci - Fraenk

    1. Hi!

      In Vorausschau fiel mir hierzu auch ne Frage ein:
      Vorhaben: Kundendatenbank, Kundennummer mit auto_increment. Ab und an werden ja nunmal wieder Kunden rausgeschmissen. Gibt es ne Möglichkeit (ist es gar die hier im Thread bereits erwähnte?), dass die DB bei jedem Neuanlegen eines Kunden erstmal in aufsteigender Reihenfolge die Kundennummern durchschaut und dann die erste "Lücke" belegt?

      Nein, so ohne weiteres geht das nicht. Du könntest aber die Tabelle auf die erste 'fehlende' ID durchsuchen, und diese dann für den neuen Kunden verwenden - aber was bringt Dir das dann? Gerade bei Kundennunmmern könnte sowas mal langfristig für Verwirrung sorgen! Außerdem kannst Du anhand der nummer dann leicht feststellen, wie 'alt' der Kunde ist!

      Grüße
      Andreas

      1. Hi!

        In Vorausschau fiel mir hierzu auch ne Frage ein:
        Vorhaben: Kundendatenbank, Kundennummer mit auto_increment. Ab und an werden ja nunmal wieder Kunden rausgeschmissen. Gibt es ne Möglichkeit (ist es gar die hier im Thread bereits erwähnte?), dass die DB bei jedem Neuanlegen eines Kunden erstmal in aufsteigender Reihenfolge die Kundennummern durchschaut und dann die erste "Lücke" belegt?
        Nein, so ohne weiteres geht das nicht. Du könntest aber die Tabelle auf die erste 'fehlende' ID durchsuchen, und diese dann für den neuen Kunden verwenden - aber was bringt Dir das dann? Gerade bei Kundennunmmern könnte sowas mal langfristig für Verwirrung sorgen! Außerdem kannst Du anhand der nummer dann leicht feststellen, wie 'alt' der Kunde ist!

        Nunja, zugegeben, so betrachtet stimmt´s schon. Ne, ich dachte lediglich an versehentlich doppelt eingetragene Kunden, Löschung noch bevor irgendwelche History entsteht. Ich hasse eben Löcher.

        Grüße
        Andreas

        Gruß & Danke für die Anregung,
        Miky

        1. Hallo!

          Nunja, zugegeben, so betrachtet stimmt´s schon. Ne, ich dachte lediglich an versehentlich doppelt eingetragene Kunden, Löschung noch bevor irgendwelche History entsteht. Ich hasse eben Löcher.

          Hm - das verstehe ich jetzt nicht. Was hat das miteinander zu tun?
          Wie willst Du denn mit Deiner Lösung doppelte Einträge verhindern? Und vor allem, wie oft löschst Du Kunden aus der DB?

          Und das sind ja keine Löcher, mußt das logisch sehen, was am sinnvollsten ist!

          Grüße
          Andreas

        2. Moin!

          Nunja, zugegeben, so betrachtet stimmt´s schon. Ne, ich dachte lediglich an versehentlich doppelt eingetragene Kunden, Löschung noch bevor irgendwelche History entsteht. Ich hasse eben Löcher.

          Falsche Herangehensweise. Eine Kundennummer gilt lebenslang - solange, wie die Firma lebt. :)

          Wenn du durch Falscheingaben Nummern sinnlos verschwendest, ist das ein Problem der Eingaberoutine, aber es sollte niemals als Ausrede für die Wiederverwendung der einmal vergebenen Kundennummer dienen. Damit erzeugst du dir beliebig viele Probleme, sobald du damit einmal angefangen hast.

          - Sven Rautenberg

          1. Moin!

            Nunja, zugegeben, so betrachtet stimmt´s schon. Ne, ich dachte lediglich an versehentlich doppelt eingetragene Kunden, Löschung noch bevor irgendwelche History entsteht. Ich hasse eben Löcher.

            Falsche Herangehensweise. Eine Kundennummer gilt lebenslang - solange, wie die Firma lebt. :)

            Jein. Ich biete Schnupperangebote an, für Gewerbetreibende, allerdings nur einmalig. In der Natur der Sache begründet, versuchen gerne mal Privatpersonen oder auch Gewerbetreibende mehrfach, ein solches Angebot zu ergattern. Um dies zu erreichen, wird sich mehrfach eingetragen. Diese Doppeleinträge kann ich getrost löschen (natürlich nach Benachrichtigung des Kunden), da dort weder je ein Auftrag notiert werden wird noch mir die Angaben sonstwie nützlich sind. Die Ersteinträge bleiben natürlich auf ewig bestehen.

            Wenn du durch Falscheingaben Nummern sinnlos verschwendest, ist das ein Problem der Eingaberoutine, aber es sollte niemals als Ausrede für die Wiederverwendung der einmal vergebenen Kundennummer dienen. Damit erzeugst du dir beliebig viele Probleme, sobald du damit einmal angefangen hast.

            Von Falscheingaben redete ich nicht.

            • Sven Rautenberg
            1. Hallo!

              Jein. Ich biete Schnupperangebote an, für Gewerbetreibende, allerdings nur einmalig. In der Natur der Sache begründet, versuchen gerne mal Privatpersonen oder auch Gewerbetreibende mehrfach, ein solches Angebot zu ergattern. Um dies zu erreichen, wird sich mehrfach eingetragen. Diese Doppeleinträge kann ich getrost löschen (natürlich nach Benachrichtigung des Kunden), da dort weder je ein Auftrag notiert werden wird noch mir die Angaben sonstwie nützlich sind. Die Ersteinträge bleiben natürlich auf ewig bestehen.

              Ich muß Sven Recht geben! Gerade um zu verhindern, das sich Leute doppelt eintrafen mußt Du doch die alten Einträge unbedingt behalten!!! Wenn Du einen Eintrag löschst, kannst Dudoch nicht mehr nachvolziehen, ob dieser sich nochmal einträgt. Und wenn Du jetzt denkst, das wenn die gleichen Daten nochmal kommen, wieder dieselbe ID bekommen.... das wäre das totale Chaos!
              Laß die Daten bestehen, und bevor Du neu einträgst, guckst Du ob eis einen Datensatz mit gleicher PLZ, Straße und Nachname gibt, oder so ähnlich! Wenn dem so ist erst gar nichts eintragen sondern eine Fehlermeldung ausgeben, sonst eintagen!

              Wenn du durch Falscheingaben Nummern sinnlos verschwendest, ist das ein Problem der Eingaberoutine, aber es sollte niemals als Ausrede für die Wiederverwendung der einmal vergebenen Kundennummer dienen. Damit erzeugst du dir beliebig viele Probleme, sobald du damit einmal angefangen hast.
              Von Falscheingaben redete ich nicht.

              Wie nennst Du das dann?

              Grüße
              Andreas

              1. Hallo!

                Ich muß Sven Recht geben! Gerade um zu verhindern, das sich Leute doppelt eintrafen mußt Du doch die alten Einträge unbedingt behalten!!! Wenn Du einen Eintrag löschst, kannst Dudoch nicht mehr nachvolziehen, ob dieser sich nochmal einträgt. Und wenn Du jetzt denkst, das wenn die gleichen Daten nochmal kommen, wieder dieselbe ID bekommen.... das wäre das totale Chaos!
                Laß die Daten bestehen, und bevor Du neu einträgst, guckst Du ob eis einen Datensatz mit gleicher PLZ, Straße und Nachname gibt, oder so ähnlich! Wenn dem so ist erst gar nichts eintragen sondern eine Fehlermeldung ausgeben, sonst eintagen!

                So dumm sind die Leute dann leider doch auch wieder nicht - sie geben (naja, die Allerdümmsten schon) nicht GENAU die gleichen Daten ein. Jüngster Fall: Ein Abteilungsleiter hat sich munter immer und immer wieder mit der gleichen Adresse eingetragen, als Ansprechpartner aber jeweils einen anderen Mitarbeiter seiner Abteilung. Sowas kannste keinem Programm überlassen, hier ne Übereinstimmung zu finden. Schließlich gibt es ja durchaus Häuser, in denen mehrere Firmen sitzen, die Adresse also wirklich identisch ist. Genauso bei größeren Firmen mit verschiedenen Abteilungen.

                Wenn du durch Falscheingaben Nummern sinnlos verschwendest, ist das ein Problem der Eingaberoutine, aber es sollte niemals als Ausrede für die Wiederverwendung der einmal vergebenen Kundennummer dienen. Damit erzeugst du dir beliebig viele Probleme, sobald du damit einmal angefangen hast.
                Von Falscheingaben redete ich nicht.
                Wie nennst Du das dann?

                Bewusstes Täuschen. Es hat also nichts mit einer falsch programmierten Eingabe zu tun.

                Grüße
                Andreas

                Gruß,
                Miky