leere ID verwenden beim neuen Record

SQL_Dummie

Benutzer
Beiträge
24
Hallo ich bin's wieder;),

hab da noch eine Frage.

Ich hab in einer Tabelle mit dieser Spalte: [laufendeNummer] [int] IDENTITY(1,1) NOT NULL,

In der Tabelle befinden sich soch Datensätze mit foldenden 'laufendeNummer': 1,2,3 und 5
(die 4 wurde mal nachträglich gelöscht)

Wenn ich mit Befehl "AddNew" einen neuen Datensatz/Record erstellt mit die Datenbank
den neuen Eintrag mit der 'laufendeNummer' = 6.

Wie kann ich in der Datenbank mitteilen, dass die auch FREIE 'laufendeNummer' verwenden soll.
Also in meinem Beispiel die 4.
 
Werbung:
Wie kann ich in der Datenbank mitteilen, dass die auch FREIE 'laufendeNummer' verwenden soll.
Also in meinem Beispiel die 4.

Das wird nicht gehen. SERIAL oder Auto_Increment oder wie auch immer solch eine automatisch generiert ID genannt wird: die DB garantiert lediglich, daß diese einmalig sind, nicht aber, daß diese fortlaufend sind. Auch eine gescheiterte Transaktion führt dazu, daß eine Lücke entsteht.
 
Gibt es vielleicht eine andere Möglichkeit?

Spalte [laufendeNummer] anders deklarieren oder z.B. einen Befehl der alle Datensätze in der Tabelle neu reoganisiert/aufräumt?
 
Die IDs lassen sich sicher anderweitig vergeben, im Zweifel schreibst du deine eigene Funktion.

Aber auch dann gilt: Du hättest keinen echten Nutzen sondern nur Nachteile. Du würdest zwar "freie" IDs wieder verwenden aber eine garantie, das bei max(ID) = 6 auch eine ID 4 existiert hast du nicht weil seit dem letzten Löschvorgang nicht zwigend auch ein Insert statt gefunden haben muss. Du weisst also bei max(ID) = 6 nicht ob dir Daten fehlen etc.

Wenn du dann mal eine Sicherung mit dem aktuellen Bestand abgleichen willst hast du wiederrum keine ID anhand der das möglich wäre da diese ihre Eindeutigkeit verloren hat.
 
Werbung:
Vielen Dank für die schnellen Antworten.

Der Nachteil von ukulele mit dem Abgleich von der Sicherung und dem aktuellem Bestand ist doch ein entscheidener Punkt für mich.
Werde wahrscheinlich auch die Idee verwerfen.

Danke für die Infos.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben