0

2 つのテーブルがあります。1 つは user と呼ばれ、ユーザーを格納し、もう 1 つは process と呼ばれ、ユーザーを更新するアクティブなプロセスのリストを格納します。

私がやりたいことは、50 人の古いユーザーを選択し、更新中のユーザー ID 範囲でプロセス テーブルにレコードを挿入してロックし、2 番目のプロセスが開始された場合にそれをロックできるようにすることです。同じユーザーの処理を開始しないでください。

総括する:

  1. プロセス テーブルで最後に処理された ID を選択します
  2. ユーザー テーブルで 50 の ID > 最後に処理された ID を選択します。
  3. 処理しようとしている ID 範囲の新しいレコードをプロセス テーブルに挿入します。

2 つのプロセス (P1 と P2) が同時に起動された場合、プロセスごとに 3 つのステップが連続して実行されるようにしたいと考えています。すなわち:

  • P1 ステップ 1
  • P1 ステップ 2
  • P1 ステップ 3
  • P2 ステップ 1
  • P2 ステップ 2
  • P2 ステップ 3

そしてそうではない

  • P1 ステップ 1
  • P2 ステップ 1
  • P1 ステップ 2

どうすればいいですか?トランザクションまたはテーブル ロック? それとも何か他のものですか?

私のテーブルは InnoDB のものです。

ありがとうございました!

4

1 に答える 1

0

行レベルのロック。InnoDB の利点は、行レベルのロックをサポートしていることです。更新したいレコードをそのトランザクションにロックする必要があります。完了時にトランザクションを積極的にリリースできるように、バッチごとにトランザクションを使用する必要があります。

参照: http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

于 2012-09-19T19:59:53.960 に答える