Lukas.: mysql: Erste freie Zahl finden

Beitrag lesen

Hi Rolf,

Wäre es möglich, dass Du eine Tabelle mit 99900 Zeilen vorbereitest, mit Spalten "Zahl" und "Verwendet"? Dann kannst Du SELECT MIN(ZAHL) FROM ZAHLEN WHERE Verwendet=0 machen. Das ist ein linearer Tablescan und kein kartesisches Produkt (bzw. ein Index-Scan wenn Du einen anlegst).

Klar ist das möglich.

Aber dann kommt das Nächste: Du hast eine potentielle Race-Condition. Du schlägst dem User eine Zahl vor, der sagt OK und ups - dann musst Du eine Fehlermeldung ausgeben "Sorry, diese Zahl wurde mittlerweile von jemand anderem kassiert". Weil nämlich dummerweise gleichzeitig ein anderer User unterwegs war und schneller OK geklickt hat. Dieses Problem kannst Du in der entkoppelten Multiuser-Umgebung namens "Web" nie ausschließen. Deshalb: überlege gut, ob Du dir mit dieser Nummer ein geeignetes Konstrukt ausgedacht hast.

Ok, die Race-Kondition ist nicht so dramatisch, weil die Chance, dass überhaupt eine Nummer gesucht wird, vielleicht 1-2 mal Täglich gegeben ist. Insofern wärs schon großes Pech, aber Du hast recht, ich muß dann tatsächlich eine Fehlermeldung ausgeben oder (ohne den User zu fragen) die nächst höhere freie Nummer vergeben. Beides unschön, aber vertretbar.

Lukas