TS: MySQL: "unique"-artig, über mehrere Datensätze:-|

Beitrag lesen

Hello,

Dank Euch für die Lösungsansätze! Die explizite Wahl eines bestimmten Sitzplatzes ist nicht vorgesehen, so dass ich mich mit der Stored Procedur weitergehend beschäftigen werde.

Soweit mir kennt ist, werden aber die Einzelstatements in einer Stored Routine trotzdem nicht gemeinschaftlich atomar. Du müsstest in der Routine also einmal vor dem Einfügen und einmal nach dem Einfügen prüfen, ob das Limit überschritten wurde.

Auch bei Transaktionen ist das mMn nicht sichergestellt, wenn man nicht Table- oder Row-Locking benutzt.

Die Einfachste Art, die Anzahl zu prüfen, ist einen zusätzlichen Datensatz mit der Anzahl mitzuführen, der nur updated wird, wenn die Anzahl kleiner als Limit ist. Dann kannst Du in der Routine erst diesen Datensatz updaten (versuchen) und wenn es geklappt hat, den Sitzer in die bisherige Sitzer-Tabelle eintragen. Das Update-Statement als solches ist ja atomar.

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.