8

プログラムはテーブルから複数のレコードを選択し、各行を更新しますが、何度も実行できるため、複数のプロセスが同時に同じタスクを完了することになります。

2 つの異なるプロセスがテーブル内の同じ行を更新するのを防ぐにはどうすればよいですか。つまり、各プロセスが異なるレコードを選択できるようにするにはどうすればよいでしょうか? MySQL の行選択レベルにロックはありますか? または、この状況で、単一の行が何度も更新されるのを防ぐためのより良い解決策はありますか?

4

1 に答える 1

12

を使用できますSELECT FOR UPDATE。トランザクション内で、「ロック」する行の選択を開始します。次のようになります。

 SELECT * from TABLE where id = 123 FOR UPDATE;

2つの異なるトランザクションが同時にこれを実行しようとすると、MySQLは最初のトランザクションがトランザクションをコミットするまで2番目のトランザクションを待機させます。そうすれば、2番目のトランザクションは、最初のトランザクションが実行された後にのみ行を確認することが保証されます。

于 2013-03-17T09:40:31.320 に答える