Peter Schenkel: primary key -sortiert er sich neu ?

hallo,

was macht ein primary key, der auf auto_inkrement gestzt ist wenn ein datensatz gelöscht wird ? Sortiert er sich neu und verteilt an alle anderen datensätze wieder neue nummern, sodaß die reihenfolge wieder stimmt und keine Zahlen übersprungen werden ?

MfG
Peter Schenkel

  1. Der Primary Key wird zumindest bei MySQL wieder vergeben, falls er zuvor gelöscht wurde.

    MfG,

    Sven Wagener.

    1. Hallo Sven!

      Der Primary Key wird zumindest bei MySQL wieder vergeben, falls er zuvor gelöscht wurde.

      Tut mir leid, aber diese Aussage ist (zumindest was mein MySQL Version 3.21.19a) anbelangt schlicht unwahr!

      Die auto_increment Nr. wird NICHT nochmals vergeben, sondern wird überschlagen. Eine Neunummerierung der alten Datensätze findet ebenfalls nicht statt.

      Im Übrigen wäre ein derartiges Verhalten auch absoluter Käse:

      Man bedenke, man habe eine 1:n Untertabelle, mit entsprechendem secondary key, der sich auf auf diese Nummern bezieht. Da bekämen dann etwaige 'Kinder' plötzlich ganz andere 'Eltern' zugewürfelt, und das wollen wir doch ganz bestimmt nicht. ;-)

      Gruß,
      kerki

      1. Hallo,

        Ich kenn keine Datenbank, welche Auto_Id's neu vergibt. Das sollte m.M. auch nicht mit manuell generierten gemacht werden.

        Man bedenke, man habe eine 1:n Untertabelle, mit entsprechendem secondary key, der sich auf auf diese Nummern bezieht. Da bekämen dann etwaige 'Kinder' plötzlich ganz andere 'Eltern' zugewürfelt, und das wollen wir doch ganz bestimmt nicht. ;-)

        Wobei zu sagen ist, daß der Datensatz aus der Mastertabelle( die mit der '1') nicht gelöscht werden soll, wenn es in der Detailtabelle (die mit dem 'n') noch Datensätze vorhanden sind, weil die dann nämlich in der Luft hängen und Joins über beide Tabellen zum scheitern verurteilt sind, bzw. Datenmüll generiert wird.

        Und wenn man sich ein bißchen schon mit langlebigen Datenbeständen herumgeschlagen hat, wobei Informationen über die ID's nicht nur in der Datenbank gesammelt sind, dann läßt man sowieso die Finger von einer ID-Neuvergabe.
        Beispiel:
        die ID 0815 symbolisiert eine Artikelnummer, sagen wir etwas billiges, eine Batterie um 1 DM  z.B.
        Weil Batterien jedoch nicht mehr verkauft werden, wird die ID gelöscht. aus ist's mit 0815.
        Irgendwann wird ein neuer Artikel angelegt, sagen wir die ultimative Sattellitenanlage um 15.000 DM, und die bekommt zufälligerweise die ID 0815.

        Ein Kunde bestellt 100 Stück Batterien 0815. Das System findet jedoch die super Sat-Anlage, und liefert.

        Der Kunde würde sich sicher über 100 Sat-Anlagen zum Wert von 1.500.000 DM freuen ;-)
        (Sowas braucht man doch wirklich oft)

        Ist zwar etwas dürr das Beispiel, weil ein Bestellwesen sowieso mehr Gegenprüfungen haben soll, aber die Idee ist ja was zählt.

        In diesem Sinne: Hände weg von Neunummerierungen (tolles Wort oder :-))

        Grüße
           Klaus

    2. Der Primary Key wird zumindest bei MySQL wieder vergeben, falls er zuvor gelöscht wurde.

      MfG,

      Sven Wagener.

      Hallo Sven,

      genauso, wie kerki für mySQL sagte, verhalten sich auch MS-SQL und MS-Access (bitte _keine_ pro/kontra MS Polemik, es geht hier um DBs allgemein).

      Bei MS-Access besteht immerhin noch die Möglichkeit, durch Komprimieren des .mdb Files, schon verbratene Auto-Id's
      erneut zur Verfügung zu stellen, falls das File nicht vorher geschlossen wurde - für eine Webanwendung natürlich kein Thema.
      MS-SQL bietet m.W. keinen Weg, verbratene Auto-Id's wiederzuverwenden. Ich kann mir nicht vorstellen, das irgendein RDBMS so etwas kann, oder liege ich da falsch?

      Gruss
      Uwe Nohl