Hello,
es gibt auch in MySQL Variablen und eine if-Funktion. Ich habe die Variablen aber noch nie benutzt.
http://www.mysql.de/doc/de/Variables.html
Vielleicht kann man 'was damit anfangen.
Sonst hilft eben nur
WriteLock
Lesen des Satzes
Updatewerte bestimmen
Update durchführen
Lock freigeben
Das wären dann aber mindestens vier Statements.
Oder man arbeitet mit optimistic Logik:
mit Select die aktuellen Werte besorgen
Update durchführen mit where-Klausel, in der die aktuellen Werte nochmals bestätigt werden müssen.
Dann kann man ja anschließend die Affected Rows lesen. Wenn die nicht ==1 sind, ist es leider scheifgegangen und jemand anders hat zwischen Select und Update gefummelt an dem Satz.
Alternativ kann man auch einen Conflict-Counter einführen. Der wird bei jedem Schreibvorgang hochgesetzt, steht aber auch mit dem letzten Wert im where-Filter. Leider hat MySQL keinen automatischen Conflict-Counter. Und Timestamp ist zu gefährlich, da 1s eine verflixt lange Zeit ist für eine Datenbank.
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen