Hello,
Ich möchte ein Browsergame programmieren und habe dazu folgende Frage:
Wie ändere ich Datenbankwerte, wenn der Spieler offline ist. Also folgendes:
Ein Spieler "verdient" pro Sekunde 5 Geld. Der Spieler geht offline, 20 Minuten danach wird er von einem anderen Spieler angegriffen. Jetzt soll der angreifende Spieler das Geld erhalten, was der angegriffene Spieler hat. Wie kann ich das verwirklichen?
Einfach umbuchen :-)
Um Bewegungen der Daten zu buchen, legt man im in der klassischen Verfahrensweise einfach "Bewegungsdatensätze" an. Hier müssen also zwei Stück geschrieben werden. Einer belastet das Konto des einen Spielers und der andere schreibt den Betrag dem Konto des anderen Spielers gut.
Das Gutschreiben bereitet dabei keine Probleme, da hier nur ein Insert ausgeführt werden muss.
Das Belasten kann dagegen ein Nebenläufigkeitsproblem bereiten, da zuerst abgefragt werden muss, wieviel Geld der Spieler besitzt um dieses dann mit dem nächsten Insert zu belasten (wegzunehmen).
Die Abfrage und der Insert müssen als atomares Statement gekapselt werden.
Hier möchte ich mal die (My-)SQL-Profis bitten, Stellung zu nehmen. Kann man ein Insert auf dieselbe Tabelle ausführen, auf dem zuvor (im selben Statement) ein select (sum) stattgefunden hat, bzw. das Select als Subquery des Insert ausführen auf dieselbe Tabelle?
Wie weit ist speziell MySQL hier?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg