Kalle_B: autoincrement - gelöschte IDs recyclen? MySQL 5

Hallöle,

neue Datensätze bekommen automatisch die nächsthöhere ID, die für den direkten User-Zgriff Bestandteil von Urls sein können.

Nun macht es aber keinen Sinn, mehrstellige IDs zu verwenden, wenn inzwischen zwei- oder dreistellige durch Löschen frei geworden sind.

Ich möchte die ID- Lücken beim INSERT wieder füllen. Gibt's dafür ein Datenbank- Kommando?

Lieben Gruß,
Kalle

  1. Hi!

    Ich möchte die ID- Lücken beim INSERT wieder füllen. Gibt's dafür ein Datenbank- Kommando?

    Nein. Es gibt nur beim Ändern einer Tabellenstruktur die Möglichkeit, einen Autoincrement-Wert einzustellen. Der lässt sich aber nicht auf einen Wert kleiner als die größte ID einstellen.

    Im Allgemeinen ist der Wert einer ID uninteressant. Er soll nur einen Datensatz eindeutig kennzeichnen. Beim Wiederverwenden eines ID-Wertes ist diese Eindeutigkeit nicht mehr gegeben.

    Lo!

    1. Hi!

      Im Allgemeinen ist der Wert einer ID uninteressant. Er soll nur einen Datensatz eindeutig kennzeichnen. Beim Wiederverwenden eines ID-Wertes ist diese Eindeutigkeit nicht mehr gegeben.

      Sehe ich anders. Wenn 4711 tot ist und ich nenne einen neuen Datensatz 4711, ist der sehr wohl eindeutig.

      Kalle

      1. Mahlzeit Kalle_B,

        Sehe ich anders.

        Dann siehst Du das falsch.

        Wenn 4711 tot ist und ich nenne einen neuen Datensatz 4711, ist der sehr wohl eindeutig.

        Nein. Denn dann bezeichnet 4711 sowohl einen nicht mehr existierenden Datensatz (auf den vielleicht noch irgendwo eine schlecht konstruierte Referenz verweist) als auch einen "neuen".

        Eindeutige Bezeichner (IDs) sollten *NIEMALS* wiederverwendet werden. Datensätze sollten - insbesondere wenn Verknüpfungen auf sie existieren (könnten) - *NICHT* "hart" gelöscht, sondern lediglich als "inaktiv" (o.ä.) gekennzeichnet werden. Mit vernünftigen DBMS ist das ohne Probleme machbar (Views, VPD usw.).

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo, EKKi,

          Eindeutige Bezeichner (IDs) sollten *NIEMALS* wiederverwendet werden. Datensätze sollten - insbesondere wenn Verknüpfungen auf sie existieren (könnten) - *NICHT* "hart" gelöscht, sondern lediglich als "inaktiv" (o.ä.) gekennzeichnet werden. Mit vernünftigen DBMS ist das ohne Probleme machbar (Views, VPD usw.).

          Ja, diese Ansicht grassiert in IT-Kreisen. Wirf miemals etwas weg, bewahre deinen Schrott für alle Zeiten auf. Es gibt keine Verlierer, nur Bewahrer. Wenn du in jungen Jahren mal Unfug gemacht hast, wird dir das noch als Opa vorgehalten. Eine grausame IT- Welt, die nichts vergisst und nichts verzeiht.

          In meinem Fall sind es Events. Ein Chorabend der längst verklungen ist, aber noch jahrelang einen Grabstein hat mit seiner Nummer. Längst wächst Moos über diesen Stein, aber seine Nummer gibt er nicht frei.

          So soll es sein.

          Gruß, Kalle

          1. Längst wächst Moos über diesen Stein, aber seine Nummer gibt er nicht frei.

            Und? Die Datenbank merkt sich immer nur die als nächstes zu vergebende ID. Wenn die da alles immer durchlaufen müsste und Lücken suchen müsste, wär sie stinklangsam.

      2. Hello,

        Sehe ich anders. Wenn 4711 tot ist und ich nenne einen neuen Datensatz 4711, ist der sehr wohl eindeutig.

        Kommt auch auf die Anwendung an.
        Für Faktura und FiBu wäre das z.B. nicht erlaubt, Kundennummern einfach wiederzuvergeben, wenn der Kunde nicht mehr vorhanden ist.

        Datensatz-IDs sollten zwar semantikfrei sein, aber ich weiß jetzt nicht, ob man einer Kundennumemr eine Semantik andichten kann und das dann nicht doch vergleichbar ist.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hallo Kalle,

    Nun macht es aber keinen Sinn, mehrstellige IDs zu verwenden, wenn inzwischen zwei- oder dreistellige durch Löschen frei geworden sind.

    Warum nicht?

    Ich möchte die ID- Lücken beim INSERT wieder füllen. Gibt's dafür ein Datenbank- Kommando?

    Nein. Eine ID ist dazu da einen Datensatz eindeutig zu identifizieren - auch wenn der Datensatz bereits wieder gelöscht wurde. Es könnte ja irgendwo immernoch ein Verweis auf diese ID (in deinem Fall ein Link) gespeichert sein, und der darf nicht einfach auf einen anderen Datensatz führen - das Thema wurde hier aber schon des öfteren durchgekaut ...

    Gruß,
    Tobias

    1. Hallo Tobias,

      Nein. ... Es könnte ja irgendwo immernoch ein Verweis auf diese ID (in deinem Fall ein Link) gespeichert sein, und der darf nicht einfach auf einen anderen Datensatz führen - das Thema wurde hier aber schon des öfteren durchgekaut ...

      Okay, an einen alten Link, z.B. in Google, habe ich nicht gedacht. Die können wirklich uralt werden ;-)

      Kalle

  3. Hallo Kalle_B.

    Nun macht es aber keinen Sinn, mehrstellige IDs zu verwenden, wenn inzwischen zwei- oder dreistellige durch Löschen frei geworden sind.

    Warum ist das denn so?

    Servus,
    Flo