Fabienne: MySQL: Autoinkrement INT

Hallo zusammen,

ich habe in einem Projekt die ID als INT-Feld angelegt und diesem die Eigenschaft "autoinkrement" zugewiesen.
Dabei geht es um Einträge, die jedesmal komplett gelöscht und neu Eingetragen werden. Logischer Weise wird jedesmal eine neue ID angelegt.
INT sind aber auf bestimmte Werte (siehe [url: http://dev.mysql.com/doc/refman/5.1/de/numeric-types.html] )beschränkt.

Rein theoretisch könnt es doch sein, dass ich irgendwann an diese Grenze komme.

Was passiert dann?
Fängt MySQL dann an die unbelegten ID's neu zu vergeben oder führt das zu einem Problem?

Viele Grüße
Fabienne

  1. Moin,

    Fängt MySQL dann an die unbelegten ID's neu zu vergeben oder führt das zu einem Problem?

    Wohl eher Ersteres. Woher auch soll MySQL wissen, dass es wieder von vorne anfangen soll mit Zählen?

    Wie eine Uhr. Btw., sofern der UNIX-Timestamp auf 32 Bit designed bleibt, ist

    Ende der Epoche: 19.01.2038 03:14:07

    denn dann sind seit dem 1.1.1970 4294967294 Sekunden vergangen.

    --roro

    --
    Mir Wurscht, in 30 Jahren bin ich (hoffentlich) tot.
    1. N'Abend!

      Wohl eher Ersteres. Woher auch soll MySQL wissen, dass es wieder von vorne anfangen soll mit Zählen?

      Verstehe ich nicht?
      Zum einen sagst Du, dass MySQL wieder von Vorne anfängt, zum anderen soll MySQL es gar nicht wissen, dass es wieder von Vorne anfangen soll....

      denn dann sind seit dem 1.1.1970 4294967294 Sekunden vergangen.

      Hat der Autoinkrement-Wert irgendwas mit nem UNIX-Timestamt zu tun?
      Wohl eher nicht.

      Frage:
      Was passiert, wenn ich den maximal möglichen autoinkrement-Wert bei einem INT-Feld erreiche?
      Werden nicht belegte IDs (INT-Zahlen) nochmals verwendet (wäre problemtisch, wenn es sich bei den IDs um ein-ein-deutige IDs handelt => Problem)?
      Oder werden dann alle neuen IDs (INT-Zahlen), die größer als 4294967294 (max INT-Wert) sind, "abgeschnitten" und als 4294967294 abgespeichert (IDs sind primary keys, ergo => dublicate entry... => Problem)?
      Oder hat MySQL eine super Lösung dafür?

      Vielen Dank für Eure Antworten!
      Fabienne

      1. Sorry,

        Wohl eher Ersteres. Woher auch soll MySQL wissen, dass es wieder von vorne anfangen soll mit Zählen?
        Verstehe ich nicht?

        ich meinte Letzters. Also Problem.

        Wenn der Wertevorrat einer Zahlenmenge erschöpft ist, ja dann ist eben Pumpe für eine Maschine, die nur das Hochzählen kennt.

        Es sei denn, Du bringst der Engine bei, welche Zahlen im Laufe einer Epoche wieder freigeworden sind.

        Frag mich nicht wie ;-)

        --roro

        1. Hi nochmals,

          Es sei denn, Du bringst der Engine bei, welche Zahlen im Laufe einer Epoche wieder freigeworden sind.
          Frag mich nicht wie ;-)

          OK, einzige Lösung die ich mir denken könnte:
          Ich lösche alle Einträge und INSERT'e diese danach wieder (und setze vorher den AUTOINKREMENT-Wert wieder auf 1).

          Oder:
          Auf BIG-INT erweitern

          Oder:
          Zwei Tabellen "kurzschließen" und in der zweiten die Zahlen über 4294967294 eintragen, in der anderen die darunter.

          Ach ja, wie wärs mit nem Textfeld und dann dort die ID immer "manuell" per PHP eintragen.... Dann könnte die ID nämlich auch ein ganz anderes Format bekommen (z.B. lkhgasrzt734ebvjhsdf86werbjhbu82werbizb)

          OK, ich sehe schon, da ist noch Handlungsbedarf.
          Sobald ich eine intelligente Lösung gefunden habe, poste ich diese hier.

          Schönen Abend noch
          Fabienne

          1. Moin,

            OK, ich sehe schon, da ist noch Handlungsbedarf.
            Sobald ich eine intelligente Lösung gefunden habe, poste ich diese hier.

            Genau! Mach das! Setze Dich durch!

            --roro

  2. echo $begrüßung;

    [auto_increment-Überlauf]
    Was passiert dann?
    Fängt MySQL dann an die unbelegten ID's neu zu vergeben oder führt das zu einem Problem?

    Probier es doch einfach aus, wenn das Verhalten nicht im Handbuch beschrieben ist. Du kannst den auto_increment-Wert auch zu Fuß setzen. Setz ihn auf den Maximalwert, oder kurz davor, und füge Datensätze hinzu. Du musst dazu keine Millionen von Datensätzen in der Tabelle haben, denn du hast ja in der Vergangenheit schon ein paar der IDs gelöscht. Für das Experiment geht "ein paar" dann eben in die Millionen.

    echo "$verabschiedung $name";