mabu: erste zahl abrufen, die noch nicht vergeben ist

Hi!

Ich hab da ne Frage zur MySQL Datenbank...

Wenn ich eine Spalte "id" habe. Dort werden laufend Zahlen eingesetzt. Wie kann ich des machen, dass automatisch die erste ganze Zahl ermittelt wird, die noch nicht in dieser Spalte enthalten ist...

Z.B. hab ich da
1 xxx xxx
2 xxx xxx
4 xxx xxx

dann sollte er 3 ermitteln, ansonsten würden immer Lücken enstehen, wenn ein Datensatz wieder gelöscht würde...

mabu

  1. Hallo Mabu,

    Wenn ich eine Spalte "id" habe. Dort werden laufend Zahlen eingesetzt. Wie kann ich des machen, dass automatisch die erste ganze Zahl ermittelt wird, die noch nicht in dieser Spalte enthalten ist...

    SELECT tabelle1.id+1 FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id+1 = tabelle2.id WHERE tabelle2.id IS NULL LIMIT 1

    Viele Grüße
    Stephan

    1. » SELECT tabelle1.id+1 FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id+1 = tabelle2.id WHERE tabelle2.id IS NULL LIMIT 1

      ich hab ja nur eine tabelle...

      1. Hallo Mabu,

        » SELECT tabelle1.id+1 FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id+1 = tabelle2.id WHERE tabelle2.id IS NULL LIMIT 1

        ich hab ja nur eine tabelle...

        Sorry, da war ich beim tippen schneller als beim Denken, tabelle1 und tabelle2 sollten aliases sein:

        SELECT tabelle1.id+1 FROM tabelle as tabelle1 LEFT JOIN tabelle as tabelle2 ON tabelle1.id+1 = tabelle2.id WHERE tabelle2.id IS NULL LIMIT 1

        Viele Grüße
        Stephan

        1. Hallo Mabu,

          und ein "order by" habe ich dummerweise auch vergessen, tsss...:

          SELECT tabelle1.id+1 as nextid FROM tabelle as tabelle1 LEFT JOIN tabelle as tabelle2 ON tabelle1.id+1 = tabelle2.id WHERE tabelle2.id IS NULL ORDER BY nextid LIMIT 1

          Viele Grüße
          Stephan

  2. Hallo,

    Wenn ich eine Spalte "id" habe. Dort werden laufend Zahlen eingesetzt. ....  ansonsten würden immer Lücken enstehen, wenn ein Datensatz wieder gelöscht würde...

    ID-Werte dienen lediglich zur eindeutigen Identifikation eines Datensatzes. Numerierungen sollen damit (u.a.) nicht vorgenommen werden. Daraus ergibt sich, daß Lücken, die durch das Löschen von Datensätzen entstehen, nicht wieder aufgefüllt werden sollen.
    Es ist nämlich eien alte Binsenweisheit, daß man Identifikationswerte  nicht wiederverwenden soll, egal ob das auf dem ersten Blick scheinbar ohne Konsequenzen erfolgen kann, oder nicht. Dieses Prinzip gilt übrigens schon wesentlich länger als es Datenbanken oder EDV gibt.

    Deshalb gibt es in Datenbanken auch keine direkten Mechanismen, den von Dir gesuchten Vorgang einfach durchzuführen.
    Schlag es DIr aus dn Kopf, und suche andere Wege, wenn Du unbedingt eine fortlaufende Numerierung benötigst.

    Grüße
     Klaus