Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

leere ID verwenden beim neuen Record

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von SQL_Dummie, 1 September 2014.

  1. SQL_Dummie

    SQL_Dummie Benutzer

    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.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. SQL_Dummie

    SQL_Dummie Benutzer

    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?
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Tabelle komplett sperren, Lücke suchen, diese nutzen. Den Frust über die schlechte Performance mit viel Alkohol bekämpfen.
     
  6. SQL_Dummie

    SQL_Dummie Benutzer

    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 von einem Moderator bearbeitet: 1 September 2014
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden