質問: 排他処理に関して教えてください。 DBは、MySQL4.2 InnoDBです。 言語は、PHP(フレームワークCakePHP) レコードを編集する際、編集画面に入る時、そのレコードのフラグをチェックし、Trueならば編集画面に入れ、Falseならば入れない仕組みを作りたいと思っております。 しかし、select文でフラグを確認し、Trueならばアップデート文でFalseに変更し、編集画面に入るやり方ですと、ほぼ同時にアクセスがあった場合、両方ともに編集画面に入れてしまいますよね? 簡単なフローを画像にしました。 トランザクションを掛けてる間、セレクトもさせない方法はあるのでしょうか。 テーブル自体をロックするしかないのでしょうか。
回答: やりたいことを実現するには、どうしてもロックは必要かと思います。 テーブル自体をロックしてももちろんよいと思いますが、トランザクション処理中ということであれば、次のURLが参考になるかと思います。 http://mysql.telepac.pt/doc/refman/4.1/ja/innodb-locking-reads.h... ただし、Webアプリだと思いますが、HTTPリクエストをまたがったトランザクション処理はいろいろ難しいので、ご注意ください。 参考: