Zum Inhalt springen

Fortlaufende Nummer erzeugen

Erstellt am 24. September 2015 · 3 Antworten · letzte Antwort am 8. Oktober 2015

Tags: Datenbank, Frage

WonkoTheSane ·

Hallo,

ich stehe vor dem Problem, dass ich eine fortlaufende Buchungsnummer erzeugen muss.

Meine Überlegung bisher:

Die Nummern werden in einer MySQL-Tabelle "config" gespeichert.

Ich erstelle eine Klasse als Singleton, dort gibt es eine Funktion getBuchungsnummer, die folgendes macht:

1. Abfrage der akutellen Buchungsnummer aus Tabelle "config"
2. Buchungsnummer inkrementieren
3. Buchungsnummer in Tabelle "config" speichern
4. Buchungsnummer zurückgeben

So weit, so gut. Doch was passiert, wenn zwei Buchungen gleichzeitig erstellt werden? Dann könnte es ja sein, dass getBuchungsnummer auch gleichzeitig ausgeführt wird und bei beiden Schritt 1 vor dem nächsten Schritt. Das würde bedeuten, ich bekomme zweimal dieselbe Nummer zurück.

Wie kann ich das verhindern? Oder reicht es, dass die Klasse Singleton ist?

Danke und viele Grüße
Wonko

runner78 ·

Variante 1:
Gib die letzte Buchung aus, sortiert nach Buchungsnummer und inkrementieren

Variante 2:
Buchungsnummer == uid
(weniger Kontrolle)

WonkoTheSane ·

Bei Variante 1 habe ich aber das gleiche Problem mit doppelten Buchungsnummern, wenn zwei Buchungen parallel angelegt werden und deshalb getBuchungsnummer mehrfach aufgerufen wird.

Variante 2 finde ich nicht so gut, ich will die Kontrolle. 🙂

aemka ·

Persistiere die BUchungen erst, wenn abgeschlossen, nimm die uid aus der Tabelle und formatiere Sie ggf noch mit führenden Nullen und weiteren ZEichen je nach Bedarf - ist absolut sicher und erfordert gar kein Coding wie das bei getBuchungsnummer o. ä. und es gibt keine übersprungenen Nummern.