Moin Moin!

Ich habe eine Tabelle 'nummernkreise'. die lediglich aus den Feldern 'id', 'name' und 'wert'  besteht.

id    name           wert
1     RechnungsNr    4711
2     AuftragsNr     5881


Insgesamt gibt es in dieser Tabelle nur so etwa 20 Datensaetze.

Wird jetzt zum Beispiel eine neue Rechnung erstellt, dann holt sich mein Programm die aktuelle Rechnungsnummer aus der Tabelle, erhoeht diese um 1 und schreibt den neuen Wert fuer die naechste Rechnung in die Datenbank. Das faellt jetzt sicherlich unter die Rubrik 'Mit Kanonen auf Spatzen' schiessen, aber es geht mir ums Prinzip.

Da ich unbedingt vermeiden will, dass der Wert zwischen einem SELECT und einem anschliessenden Update zwsichenzeitlich in der Datenbank geaendert wurde, habe ich mich zu folgender Abfrage entschlossen:

UPDATE nummernkreise SET wert = wert+1 WHERE name = 'Angebot' RETURNING wert;

Das klappt auch einwandfrei. Dennoch mal die Frage an euch, ist diese Query so in Ordnung oder wuerdet ihr das anders loesen?

Ich habe leider zu viele Jahre mit MySQL gearbeitet, wo man sich derartige Gedanken halt eher nicht macht solange es denn funktioniert oder zu funktionieren scheint. Und nachdem ich Monate gebraucht habe meine Software um PostgreSQL zu erweitern - was inzwischen auch gut laeuft - opfere ich jetzt ein paar Monate mehr, um MySQL ganz rauszuwerfen und bei der Gelegenheit auch meine Queries zu optimieren.

Falls es wichtig ist, ich programmiere unter Linux und verwende aktuell PostgreSQL 9.2.

Gruss

Guenther
-- 
DavaoSOFT, the home of ERPel
ERPel, das deutsche Warenwirtschaftssystem fuer LINUX
http://www.davaosoft.com