私はオンラインゲームを書いています、派遣部隊という名前のセクションがあります。 1つのアカウントの2人以上のユーザーが1回の移動を送信しようとすると、軍隊は2倍になります。innodbの行をロックし、ライブバージョンを取得
私はmysqlから行のライブバージョンを取得し、読み込み、書き込み、その行の何かを更新しないようにしたいと思います。
実際には可能ですか?私はinnodbリファレンスで共有モードで更新とロックを選択するだけです。
任意のヘルプはappericiatedです。
私はオンラインゲームを書いています、派遣部隊という名前のセクションがあります。 1つのアカウントの2人以上のユーザーが1回の移動を送信しようとすると、軍隊は2倍になります。innodbの行をロックし、ライブバージョンを取得
私はmysqlから行のライブバージョンを取得し、読み込み、書き込み、その行の何かを更新しないようにしたいと思います。
実際には可能ですか?私はinnodbリファレンスで共有モードで更新とロックを選択するだけです。
任意のヘルプはappericiatedです。
BEGIN;
SELECT ... FROM t ... WHERE ... FOR UPDATE;
...
UPDATE t ...;
COMMIT;
t
から行を読み取ることができる他、彼らがしようとした場合、彼らは遅れたり、デッドロックされますいずれかSELECT
がタッチした行を変更します。
あなたは本当にすべてを防ぐ必要がありますかは特定の行に対してと表示されますか?あなたのシナリオをさらに説明してください。
InnoDB内で特定の行をロックするために、以下のMySQLのドキュメントをご覧ください:
トランザクションを使用したいと思うでしょう。 – ceejayoz
私はmysqliでトランザクションを使用しています。しかし、他のプロセスがその行を選択(読み込み)せずに待機するように行をロックしますか? –
あなたは軍隊配備のステータスを示すあなたのテーブルにフラグ列を持つことができます。軍隊が配備されているかどうか常に確認することができます。 2つの異なるデバイスでユーザーがログインしても、これを処理できます。 –