0

我有 2 个表,一个称为 user,用于存储用户,另一个称为 process,用于存储更新用户的活动进程列表。

我想要做的是能够选择 50 个过时的用户,通过在进程表中插入一条记录来锁定他们,该记录具有我正在更新的用户 ID 范围,这样如果启动了第二个进程,它将不开始处理相同的用户。

总结一下:

  1. 在进程表中选择最后处理的id
  2. 在用户表中选择 50 ids > last processes id
  3. 在进程表中插入一条新记录,其 ids 范围为我将要处理的范围

我想确保如果同时启动 2 个进程(P1 和 P2),则每个进程连续执行 3 个步骤。IE:

  • 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 回答