Kann AutoIncrement bei MyISAM überlaufen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kann AutoIncrement bei MyISAM überlaufen

    Hallo,

    ich habe gelesen, dass beim löschen eines Datensatzes aus einer Tabelle vom Typ MyISAM der AutoIncrement Wert nicht neu (niedriger) gesetzt wird, wenn der Datensatz den höchsten aktuellen Index hatte.
    Ich rechne zwar nicht damit, dass meine Datenbank so viele Einträge gleichzeitig speichern muss, dass INT nicht mehr reicht, aber die Daten werden häufig gelöscht und neue eingefügt werden, und bei diesem Verhalten befürchte ich, dass irgendwann der maximale Indexwert erreicht wird.
    Was passiert dann? Ich habe gelesen, dass es zu einer DuplicateKey Fehlermeldung kommt, aber was dann? kann ich die datenbank dann nicht mehr nutzen und muss sie neu anlegen, oder werden die "Lücken" gefüllt, oder gibt es einen "ReIndexing" Befehl, der jeden Indexwert neu vergibt, und dadurch die Werte in niedrigere Wertebereiche bringt?

    Vielen Dank für jede Hilfe,
    CGI-BIN

  • #2
    PS: Gesucht hab ich schon, auch mit Treffern, aber die Antworten waren immer nur "das kommt nicht vor, so viele Daten hat keiner". Das ist ja durchaus möglich (davon gehe ich auch aus), aber irgendwie stellt mich dass nicht zufrieden, und die MySQL Entwickler müssen sich dazu ja wohl Gedanken gemacht haben, wenn sie die maximale Dateigröße auf 8 Millionen TeraByte anheben (was nun ehrlichgesagt auch keiner hat:-) was mit dem Index bei diesen Datenmengen passiert, oder?

    Außerdem komm ich dann evtl. mit einem kleineren Datentyp aus, weil wie gesagt gleichzeitig nicht so viele Daten gespeichert sind, wenn es dafür eine gute Lösung gibt.

    Kommentar


    • #3
      mit einem 4-Bytes Integer kommt jede DB damit zurecht.
      Sagen wir mal, du hättest 1 Mio. DS per mon. somit hast du eine ID-Kapazität für ca. 178 Jahren. Reicht dir das nicht

      Kommentar


      • #4
        Doch sicher, aber ist dass wirklich die einzige Überlegung die dahinter steckt, so wie damals mit "64kByte RAM reichen für jede erdenkliche Aufgabe völlig aus"? (nicht unbedingt wörtlich)

        Kommentar


        • #5
          Du kannst auch händisch die ID einfügen, aber ob das problemlos mit MySQL funz

          Code:
          select min(a.lid)+1 as newid from tblTable a where a.lid>0 and
          not exists (select lid from tblTable b where b.lid=a.lid+1)
          damit suchst du die Lücken auf und kannst gelöschte ID wieder verwenden. Es ist für MS-SQL geschrieben.

          Hier wird von 0 angefangen. Du kannst jeden Startwert festlegen,
          indem du where a.lid>deinStartWert schreibst.
          Zuletzt geändert von asp2php; 28.05.2004, 11:06.

          Kommentar


          • #6
            Re: Kann AutoIncrement bei MyISAM überlaufen

            wenn du angeblich schon einiges zum thema nachgelesen hast - wieso bist du dann nicht auch darauf gestossen, dass die frage
            [...] oder werden die "Lücken" gefüllt, oder gibt es einen "ReIndexing" Befehl, der jeden Indexwert neu vergibt, und dadurch die Werte in niedrigere Wertebereiche bringt?
            vollkommener schwachfug ist, weil damit eben der sinn von auto_increment ad absurdum geführt würde?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Nein ... kann es nicht ... im übrigen hätte jeder von euch das ganz einfach testen können ... :

              Erstellt eine Tabelle
              CREATE TABLE `auto_incr_test` (
              `id` tinyint(4) NOT NULL auto_increment,
              PRIMARY KEY (`id`)
              ) TYPE=MyISAM;

              Fügt einen Datensatz mit den Wert 126 ein
              INSERT INTO auto_incr_test (id) VALUES (126);

              funktiononiert toll ... also einen weiteren Datensatz ... diesesmal ohne Wert ...
              INSERT INTO auto_incr_test (id) VALUES (NULL);

              schick ... funktioniert auch ganz Klasse ... der neue Datensatz hat die "id" 127 ... also nochmal
              INSERT INTO auto_incr_test (id) VALUES (NULL);

              Oups
              Fehlermeldung: #1062 - Doppelter Eintrag '127' für Schlüssel 1

              Seht ihr ... so einfach kann man sich fürchterlich dumme Fragen sparen ... danke für eure Aufmerksamkeit!
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                genau diese Situation habe ich jetzt

                das problem mit der id 127 habe ich jetzt in einer Tabelle,

                wie kann man das ändern????

                Kommentar


                • #9
                  welchen feldtyp hat die spalte?
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Danke für das Interesse

                    `id` tinyint(4) NOT NULL auto_increment,

                    Kommentar


                    • #11
                      mach mal INT draus.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        jetzt gehts

                        weiter mit "id" 129

                        Vielen Dank!

                        Kommentar


                        • #13
                          joa lesen hilft!!!
                          eventuell sogar mal das manual oder so
                          btw. nehmt int unsigned dann habt ihr noch mehr vom leben...
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar

                          Lädt...
                          X