我应该使用表锁还是交易?

时间:2012-09-19 19:31:11

标签: mysql transactions table-locking

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

我想要做的是能够选择50个过时的用户,通过在进程表中插入具有我正在更新的用户ID范围的记录来锁定它们,以便在第二个进程被触发时,它不会开始处理相同的用户。

总结:

  1. 在流程表中选择上次处理的ID
  2. 在用户表格中选择50 ids>最后处理的ID
  3. 在流程表中插入一条包含我即将处理的ids范围的新记录
  4. 我想确保如果同时启动2个进程(P1和P2),则每个进程连续执行3个步骤。即:

      
        
    • P1第1步
    •   
    • P1第2步
    •   
    • P1第3步
    •   
    • P2步骤1
    •   
    • P2第2步
    •   
    • P2步骤3
    •   

    而不是

      
        
    • P1第1步
    •   
    • P2步骤1
    •   
    • P1第2步
    •   
    •   

    我该怎么做?交易还是表锁?甚至是别的什么?

    我的桌子是InnoDB。

    谢谢!

1 个答案:

答案 0 :(得分:0)

行级锁定。 InnoDB的优点是它支持行级锁。您需要锁定您有兴趣更新的记录到该事务。您应该每批使用一个事务,这样您就可以在完成后积极地释放它们。

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