Ulf: mysql: Den Primärschlüssel zurücksetzen

Guten Morgen *Kaffee einschenk*,

kommen wir zur Sache:
Ich habe in meiner Datenbank, die zwar in einer Produktionsumgebung benutzt wird, Testeinträge gemacht. Da ich diese inzwischen aber wieder gelöscht habe, sind unschöne "Löcher" entstanden.
Wie kann ich den Primärschlüssel so zurücksetzen, dass die Datensätze behalten werden, aber bei 1 beginnen und so enden, wie auch die Anzahl der Einträge ist?

  1. yo guten morgen,

    Da ich diese inzwischen aber wieder gelöscht habe, sind unschöne "Löcher" entstanden.

    die löcher sollten von mysql bei neuen einträgen wieder aufgefüllt werden.

    Wie kann ich den Primärschlüssel so zurücksetzen, dass die Datensätze behalten werden, aber bei 1 beginnen und so enden, wie auch die Anzahl der Einträge ist?

    eigentlich ist das nur ein kosmetische eingriff, quasi wie fettabsaugen. für die funktionsweise wird ist das nicht notwendig. und ich bin mir nicht sicher, ob es da unter mysql eine einfache lösung gibt. eine möglichkeit wäre, einen dump der dateninhalte zu machen. dann alle datensätze der tabelle löschen, den autoincrement löschen, wieder setzen und die daten von dem dump einspielen.

    aber vielleicht weiss jemand eine schnellere lösung.

    Ilja

  2. Moin!

    kommen wir zur Sache:
    Ich habe in meiner Datenbank, die zwar in einer Produktionsumgebung benutzt wird, Testeinträge gemacht. Da ich diese inzwischen aber wieder gelöscht habe, sind unschöne "Löcher" entstanden.

    Die per auto-increment hochgezählte Datensatz-ID dient nicht dazu, die Datensätze schön durchzunumerieren, sondern sie eindeutig zu identifizieren.

    Aus diesem Grunde ändert sich die ID eines Datensatzes niemals, sobald er angelegt ist, weil in einer komplexeren Datenbank andere Tabellen auf diese ID verweisen. Wenn man das falsch ändert, gibt es ein Chaos.

    Und auch Verweise außerhalb der Datenbank auf diese Datensatz-ID wären betroffen. Typisches Beispiel: Ersatzteilnummern. Wäre nicht schön, wenn der Kunde "567" bestellt und einen 12-Volt-Wippenschalter erwartet, aber von dir eine Flugzeugturbine erhält, nur weil du deine IDs umgestellt hast (umgekehrt wäre es natürlich genauso blöd).

    Außerdem entstehen Lücken auch ganz ohne Testeinträge dadurch, dass irgendwann einmal Datensätze von ganz alleine gelöscht werden. Und diese Lücken schließt man auch nicht wieder.

    Wie kann ich den Primärschlüssel so zurücksetzen, dass die Datensätze behalten werden, aber bei 1 beginnen und so enden, wie auch die Anzahl der Einträge ist?

    Du läßt alles so, wie es ist. Das ist am besten.

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 21205,05 Euro Spendengelder!
    1. yo,

      Aus diesem Grunde ändert sich die ID eines Datensatzes niemals, sobald er angelegt ist, weil in einer komplexeren Datenbank andere Tabellen auf diese ID verweisen. Wenn man das falsch ändert, gibt es ein Chaos.

      wenn keine beziehung bestehen, dann sollte das gehen oder aber man ändert alle einträge in allen relevanten tabellen mit, denn sie wissen, was sie tun.

      Und diese Lücken schließt man auch nicht wieder.

      das dbms sollte das tun.

      Ilja

      1. Hi Ilja

        Und diese Lücken schließt man auch nicht wieder.

        das dbms sollte das tun.

        Nein, blos nicht. Stell dir mal vor, du musst die Daten aufbewahren. Ein Beispiel wäre hier das Bestellwesen. Aktuelle Bestellungen werden in einer anderen Tabelle aufbewahrt als ältere um den Zugriff zu beschleunigen und zb dem Kunden Zugriff darauf zu ermöglichen. Ältere Bestellungen müssen jedoch nach wie vor unter der ursprünglichen ID gespeichert sein da diese die Referenz darstellt um die Bestellung wieder zu finden.

        Gruss Daniela

        1. yo,

          Nein, blos nicht. Stell dir mal vor, du musst die Daten aufbewahren. Ein Beispiel wäre hier das Bestellwesen. Aktuelle Bestellungen werden in einer anderen Tabelle aufbewahrt als ältere um den Zugriff zu beschleunigen und zb dem Kunden Zugriff darauf zu ermöglichen. Ältere Bestellungen müssen jedoch nach wie vor unter der ursprünglichen ID gespeichert sein da diese die Referenz darstellt um die Bestellung wieder zu finden.

          ich glaube wir reden von zwei verschienden sachen. ich meine nicht die autowerte, sondern die lücken in der speicherung.

          Ilja

          1. Moin!

            ich glaube wir reden von zwei verschienden sachen. ich meine nicht die autowerte, sondern die lücken in der speicherung.

            Und ich meinte nicht die Lücken in der Speicherung, sondern die Autowerte. Ergo...

            - Sven Rautenberg

            --
            Die SelfHTML-Developer sagen Dankeschön für aktuell 21205,05 Euro Spendengelder!