PHP+MySQLを実行しているWebサイトがあります。これはマルチユーザーシステムであり、ほとんどのMySQLテーブルはMyISAMベースです。
次の状況で、ここ数時間困惑しました。2人の(同時)ユーザーA、Bがいます。それらの両方がこれを行います:
- 表1で読み取り操作を実行します
- 別のテーブル2で書き込み操作を実行します(前の読み取り操作が明確な結果を返す場合のみ、たとえばSTATUS = "OK")
BはAに向かって少し遅れています。
したがって、次のように発生します。
- ユーザーAは、表1で読み取りを実行し、STATUS="OK"を確認します。
- (ユーザーAのスケジュールは表2に書き込みます)
- ユーザーBは、表1で読み取りを実行し、それでもSTATUS="OK"を表示します。
- ユーザーAが表2に書き込みを実行します(結果としてSTATUS = "NOT OK"になります)
- ユーザーBは、表2で書き込みを実行します(STATUS = "OK"と想定)
表1の読み取りと表2への書き込みがクリティカルセクションとして定義され、アトミックに実行される場合、これを防ぐことができると思います。これは、スレッドなどを使用するJavaでは完全に正常に機能することを私は知っていますが、PHPでは、私が知る限り、スレッド通信はありません。
ですから、私の問題の解決策はデータベースに関連している必要がありますよね?何か案は?
どうもありがとう!