質問: トランザクションの処理をPHP&MySQLでかくことになったのですが、 更新クエリ実行の前に、更新して良いデータかどうかを確認するクエリを投げる場合がありますよね そこで例えば10000件のデータをDBから取得してPHPのループなどでチェックしている最中に 他の操作でレコードの値が変わってしまうような状況を回避するにはどうすればよいのでしょうか 調べた所for update 句などの方法があるみたいなのですが、メジャーなやり方ですか?
回答: いくつか対策方法が考えられます。 * SELECT... FOR UPDATEを使う * トランザクション分離レベルを変える(InnoDBではREPEATABLE READで問題なし) * テーブルごとロックする なお、1万行をPHPで回しながら書き換えるとなると、DB側からすればかなり時間のかかる処理となるので、他の負荷が少ない時間にすすめることを強くおすすめします。