Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
プログラムはテーブルから複数のレコードを選択し、各行を更新しますが、何度も実行できるため、複数のプロセスが同時に同じタスクを完了することになります。
2 つの異なるプロセスがテーブル内の同じ行を更新するのを防ぐにはどうすればよいですか。つまり、各プロセスが異なるレコードを選択できるようにするにはどうすればよいでしょうか? MySQL の行選択レベルにロックはありますか? または、この状況で、単一の行が何度も更新されるのを防ぐためのより良い解決策はありますか?
を使用できますSELECT FOR UPDATE。トランザクション内で、「ロック」する行の選択を開始します。次のようになります。
SELECT FOR UPDATE
SELECT * from TABLE where id = 123 FOR UPDATE;
2つの異なるトランザクションが同時にこれを実行しようとすると、MySQLは最初のトランザクションがトランザクションをコミットするまで2番目のトランザクションを待機させます。そうすれば、2番目のトランザクションは、最初のトランザクションが実行された後にのみ行を確認することが保証されます。