Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#5

AW: Kommendes AutoInc Value bestimmen

  Alt 8. Nov 2017, 12:34
AutoInc wird im Normalfall vom DBMS verwaltet und dient in der Regel dazu, Datensätzen eine einzigartigen ID zu verpassen, um die sich das Anwendungsprogramm nicht kümmern muss.

Solange sichergesellt ist, dass eine Table nur von einem Cleint verwendet wird, was ja bei MemoryTables möglich ist, dann könnte man einfach mal Max(Couter) abfragen. Der nächste Int wäre dann wohl auch der nächste AutoInc-Wert.
ABER:
Ein DBMS speichert sich für die Tables die jeweiligen aktuellen AutoInc-Wert weg, und und nimmt dies zum Bestimmen des nächsten AutoInc-Werts.
Das heißt, wird aus der Table:
ID Name
1 Tom
2 Klaus
3 Peter
der Datensatz "Peter" gelöscht, bleibt der letzte AutoInc der Tabelle auf 3. Wenn jetzt "Willi" eingefügt wird, dann sieht die Tabelle so aus
ID Name
1 Tom
2 Klaus
4 Willi

Würde man also mit Max(ID) vor dem Einfügen von "Willi" abfragen, bekäme man als Result 2 und würde fälschlicherweise davon ausgehen, dass der nächste die 3 wäre.

Es gibt je nach DBMS auch die Möglichkeit für eine AutoInc den gespeicherten Wert abzufragen. Ob das bei MemoryTables auch geht, weiß ich nicht.

Oder du verwaltest Counter generell selbst, also kein AutoInc sondern nur ein normales Int-Feld. Dann kannst du generell mit Max(Couter)+1 den nächsten bestimmen, musst ihn aber dann auch selber mit eintragen.
Letzteres ist aber in eine Multiuser-Umgebung nicht wirklich zu empfehlen, dann es kann auf Grund verschiedener Ursachen immer dazu kommen, dass zwischen Abfrage des Max(Couter)+1 und dem tatsächlichen Speichern des Datensatzes doch noch ein anderes Speichervorgang eines anderen Clients dazwischen kommt. Und schon hätte eine Inkonsistenz.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat