2012-09-19 48 views
0

我有2個表,一個叫做user,存儲用戶,一個叫進程,存儲更新用戶的活動進程列表。我應該使用表鎖還是事務?

我想要做的是能夠選擇50個過時的用戶,通過在進程表中插入一條記錄並使用我正在更新的用戶標識範圍來鎖定它們,這樣如果第二個進程被觸發它不會開始處理相同的用戶。

綜上所述行動:

  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的。

謝謝!

回答

0

行級鎖。 InnoDB的優點是它支持行級鎖。您需要鎖定您有興趣更新該交易的記錄。您應該使用每批次的交易,這樣您可以在完成後大力釋放它們。

請參閱:http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

+0

感謝您的回答。問題是每次更新可能需要很長時間,我不想讓這些數據庫中的任何內容鎖定很長時間。我正在尋找一種方法來確保我的3個步驟是連續執行的。 –

相關問題