Torsten: MySQL auto_increment

Hallo,

ich habe folgende User-Tabelle:

id |  name  |    email
----------------------------
 1  |  karl  |  karl@gmx.de
 2  |  otto  |  otto@gmx.de

Feld 'id' ist Primärschlüssel und ist auf auto_increment gesetzt.

Wenn ich jetzt den Datensatz mit der id 2 lösche und sich daraufhin ein neuer User ein Account anlegt, bekommt er die id 3. Ist ja auch logisch, sieht aber unschön in der Tabelle aus. Der karl hat die 1 und der neue User darunter die 3.

Gibt es eine Möglichkeit die id-Folge lückenlos anzupassen wenn ich einen Datensätze lösche?

Gruß
Torsten

  1. Hi,

    Wenn ich jetzt den Datensatz mit der id 2 lösche und sich daraufhin ein neuer User ein Account anlegt, bekommt er die id 3.

    ach komm, bitte nicht schon wieder. Das Thema ist doch nun wirklich schon abgekaut und ausgelutscht.

    sieht aber unschön in der Tabelle aus.

    Tut es nicht. Die ID hat *keine* Bedeutung neben der Eindeutigkeit. Gar keine. Nein, auch die nicht. Der explizite Wert ist zu exakt 100% absolut irrelevant. Er muss eindeutig sein, das ist alles. Mehr nicht. Immer noch nicht. Und mehr wird es auch nie sein. Es ist sogar völlig egal, ob es sich bei den Werten um Zahlen handelt oder um, sagen wir, DNS-Sequenzen. Haupt- und Nebensache, mit ihnen kann man den Datensatz IDentifizieren.

    Gibt es eine Möglichkeit die id-Folge lückenlos anzupassen wenn ich einen Datensätze lösche?

    Es gibt keinen _Grund_, das zu tun.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      [...] Er muss eindeutig sein, [...] DNS-Sequenzen [...]

      Annahme:

      • Wir haben eine MySQL-Tabelle "menschen".
      • Als id wird die DNS-Sequenz jedes Menschen genommen.

      Jetzt nehmen wir uns einen Menschen und klonen ihn, der Klon hat also die gleiche DNS-Sequenz. Ergo bekommen wir nun Probleme, ihn bei der Geburt in die Tabelle 'menschen' reinzubringen. Schließlich ist die Sequenz nicht mehr eindeutig.
      Und trotzdem ist der Klon ein eigenes Individuum...

      ;-)

      Grüße

      Marc *SCNR* Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Hi,

        [...] Er muss eindeutig sein, [...] DNS-Sequenzen [...]

        Annahme:

        • Wir haben eine MySQL-Tabelle "menschen".
        • Als id wird die DNS-Sequenz jedes Menschen genommen.

        Jetzt nehmen wir uns einen Menschen und klonen ihn, der Klon hat also die gleiche DNS-Sequenz. Ergo bekommen wir nun Probleme, ihn bei der Geburt in die Tabelle 'menschen' reinzubringen. Schließlich ist die Sequenz nicht mehr eindeutig.

        Hat Cheatah gesagt, daß in einem solchen Fall die DNS des jeweiligen Menschen benutzt werden soll?
        Nein, er hat ganz allgemein von DNS-Sequenzen gesprochen.

        Da in Deinem Fall des Klons die DNS nicht eindeutig ist, ist sie als Schlüssel nicht geeignet.
        Dann muß eben eine andere DNS-Sequenz benutzt werden.

        Da die Schlüsselspalte ja außer der Schlüsselfunktion keinerlei Bedeutung hat, ist das ja auch völlig egal.

        Um nachzuschauen, ob der Mensch z.B. das Gen für blonde Haare hat, ist die Spalte sowieso nicht geeignet, da sie ja außer der Schlüsselfunktion keinerlei Bedeutung hat, also macht es auch nichts, wenn dort nicht die DNS des jeweiligen Menschens, sondern die irgendeiner Kakerlake drinsteht.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. Hallo,

      ok ok Ihr habt ja vollkommen Recht!
      Ich habe das id-Feld halt für eine Auflistung ausgenutzt. Dann muss ich wohl meine Auflistung im PHP-Code erzeugen.

      Gruß
      Torsten

      1. Moin!

        ok ok Ihr habt ja vollkommen Recht!
        Ich habe das id-Feld halt für eine Auflistung ausgenutzt. Dann muss ich wohl meine Auflistung im PHP-Code erzeugen.

        Nein! Wieso?

        Lass das den Browser machen. Es gibt dafür nummerierte Listen in HTML:

        <ol>
        <li>Item</li>
        <li>Item</li>
        </ol>

        Warum willst Du den womöglich an der Leistungsgrenze arbeitenden Server mit solch trivialen Aufgaben schrecken...

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Moin!

    Gibt es eine Möglichkeit die id-Folge lückenlos anzupassen wenn ich einen Datensätze lösche?

    Ja sicher. Du löschst die Increment-Spalte und fügst Sie neu ein.
    Aber überlege Dir, was das bringen soll. Stell Dir vor, es ist ein Forum. Otto meldet sich an, Du schreibst seine ID (2) in die Session. Er erstellt einen Beitrag. Karl meldet sich inzwischen ab, Ralf an. Also hat jetzt Otto die ID 1 (nur die Session weiss nichts davon...) und Ralf die 2.

    Otto sendet den Beitrag. Im Forum steht jetzt, dieser wäre von Ralf, weil Du ja bestimmt aus Gründen der Effektivität die ID im Forum speicherst und den Namen aus der Tabell holst.

    Mache Dir mal Gedanken darüber, wozu eine ID gut ist... und überlege dann ob Du wegen einer gut aussehenden Tabelle die Probleme oder die Leistungsminderung willst. (Das Neuanlegen der ID-Spalte und die Neuindizierung der Tabelle fressen halt Leistung...)

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Hallo,

      Mache Dir mal Gedanken darüber, wozu eine ID gut ist... und überlege dann ob Du wegen einer gut aussehenden Tabelle die Probleme oder die Leistungsminderung willst. (Das Neuanlegen der ID-Spalte und die Neuindizierung der Tabelle fressen halt Leistung...)

      Ok, hab ich. Wie ist das mit der Leistungsminderung zu verstehen? Wieso geht performance verloren wenn ich die ID-Spalte neu enlege?

      Gruß
      Torsten

      1. Hallo Torsten,

        Mache Dir mal Gedanken darüber, wozu eine ID gut ist... und überlege dann ob Du wegen einer gut aussehenden Tabelle die Probleme oder die Leistungsminderung willst. (Das Neuanlegen der ID-Spalte und die Neuindizierung der Tabelle fressen halt Leistung...)

        Ok, hab ich. Wie ist das mit der Leistungsminderung zu verstehen? Wieso geht performance verloren wenn ich die ID-Spalte neu enlege?

        Ganz einfach:
        Wenn du die id-Spalte unangetastet lässt, brauchst du auch keine Performance. ;-)

        Und das ist übrigenz auch der Sinn von id's, dass man sie im Nachhinein nicht mehr anfasst. Sobald man eingreift geht die Eindeutigkeit verloren.

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
        http://emmanuel.dammerer.at/selfcode.html
        1. Hallo,

          Ganz einfach:
          Wenn du die id-Spalte unangetastet lässt, brauchst du auch keine Performance. ;-)

          versteh ich nicht.

          Und das ist übrigenz auch der Sinn von id's, dass man sie im Nachhinein nicht mehr anfasst. Sobald man eingreift geht die Eindeutigkeit verloren.

          is mir klar.

          Gruß
          Torsten

          1. Moin!

            Ganz einfach:
            Wenn du die id-Spalte unangetastet lässt, brauchst du auch keine Performance. ;-)
            versteh ich nicht.

            1. Du hast ein Blatt, auf dem etwas steht.
            2. Du zerreist es.
            3. Du schreibst es neu.
            4. Du hast ein Blatt, auf dem etwas steht.

            Prüfe bitte, wann Du mehr Zeit zum Fernsehen hast.

            a) Du gehst 1 bis 4 schrittweise durch.
            b) Du lässt 2 und 3 aus.

            Bist du mit sinnlosen Tätigkeiten wie Zettel zerreisen und neu schreiben ausgelastet, dann ist Deine verbleibende Systemperformance nahe NULL, obwohl Dein Hirn womöglich schnell ist, weil es ja mit völlig unnützen Tätigkeiten ganz gut überlastet ist. Dem Rechner gehts genau so.

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  3. Hallo Torsten,

    Gibt es eine Möglichkeit die id-Folge lückenlos anzupassen wenn ich einen Datensätze lösche?

    Die Möglichkeit gäbe es. Aber das ist nicht der Sinn - eine id dient nicht umsonst der _eindeutigen_ Identifikation, die bei wechselnden IDs nicht mehr gewährleistet ist.

    Oder mit anderen Worten: Daran solltest du dich gewöhnen.. ;-)

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html