"nächsten" freien Primary Key finden.



  • Hallo,

    Ist es unter SQL möglich in einer Spalte voller Zahlen (Primary Key) den nächsten freien Key zu bekommen?
    Dazu muss ich sagen, dass die Zahlen nicht unbedingt fortlaufend sind, und ich gerne den kleinsten freien Key hätte.
    (Ich kann doch nicht immer ein SELECT * ORDER BY machen.....)

    Oder gibts da vielleicht etwas unter C++?

    Datenbank: MySQL, Compiler: MinGW, OS:Win32

    Gruss
    R



  • Setz den Primary Key doch einfach auf AUTO_INCREMENT wenn du schon MySQL verwendest.

    Bei richtigen Datenbanken legt man für das Feld eine Sequence an und holt von der jedesmal die nächste freie ID.

    MfG SideWinder



  • Und freigewordene Keys werden auch nicht 'recycled'. 😉



  • Joe_M. schrieb:

    Und freigewordene Keys werden auch nicht 'recycled'. 😉

    Genau das war es ja eigentlich, was ich wollte....

    Naja, ich denke ich werde SideWinders Vorschlag durchführen....

    Gruss
    R



  • Der Osterhase hatte erst mal ein paar versteckt, aber ich hab sie auch noch nicht gefunden. 😞



  • Ein Primary Key ist es dehalb weil er eindeutig ist.
    Löscht du einen Datensatz dann solltest du einem neuen Datensatz nicht diesen Primary Key geben sonder das der Datenbank überlassen. (Autoinc)
    Solltest du eine Key auslesen und ihn händisch vergeben dann kann es dir passieren das 2 Programm gleichzeitig das machen und bei den Key bekommen da du zumindest immer 2 Abfragen hast. SELECT INSERT. Dazwischen kann ein andere aber auch SELECT machen. Bei MySQL hat SELECT vor INSERT Vorrang.



  • Das Problem ließe sich mit Locks umgehen. Aber wie gesagt, nimm das was die DB dir anbietet (performanter und schöner).

    MfG SideWinder



  • Falls es Dir darum geht, eine lückenlose Numerierung zu erhalten, solltest Du ein weiteres Feld in der DB anlegen, dass Du dafür verwendest. Eine solche 'laufende Nummer' kannst Du modifizieren und 'reorganisieren', wie Du möchtest, ohne die Datenbankintegrität zu riskieren.


Log in to reply