Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我应该使用表锁还是事务?_Mysql_Transactions_Table Locking - Fatal编程技术网

Mysql 我应该使用表锁还是事务?

Mysql 我应该使用表锁还是事务?,mysql,transactions,table-locking,Mysql,Transactions,Table Locking,我有两个表,一个叫做user,存储用户,另一个叫做process,存储更新用户的活动进程列表 我想做的是能够选择50个过期用户,通过在进程表中插入一条记录来锁定他们,该记录具有我正在更新的用户id范围,以便在启动第二个进程时,它不会开始处理相同的用户 总而言之: 在流程表中选择上次处理的id 在用户表中选择50 id>上次处理的id 在流程表中插入一条新记录,其ID范围为我将要处理的ID范围 我想确保如果同时启动2个进程(P1和P2),那么每个进程都会连续执行3个步骤。i、 e: P1步骤1

我有两个表,一个叫做user,存储用户,另一个叫做process,存储更新用户的活动进程列表

我想做的是能够选择50个过期用户,通过在进程表中插入一条记录来锁定他们,该记录具有我正在更新的用户id范围,以便在启动第二个进程时,它不会开始处理相同的用户

总而言之:

  • 在流程表中选择上次处理的id
  • 在用户表中选择50 id>上次处理的id
  • 在流程表中插入一条新记录,其ID范围为我将要处理的ID范围
  • 我想确保如果同时启动2个进程(P1和P2),那么每个进程都会连续执行3个步骤。i、 e:

    • P1步骤1
    • P1步骤2
    • P1步骤3
    • P2步骤1
    • P2步骤2
    • P2步骤3
    而不是

    • P1步骤1
    • P2步骤1
    • P1步骤2
    • 等等
    我该怎么做?事务还是表锁?或者别的什么

    我的桌子是InnoDB的


    谢谢大家!

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


    请参阅:

    谢谢您的回答。问题是每次更新都需要很长的时间,我不想在数据库中把任何东西锁定那么长时间。我只是在寻找一种方法,以确保我的3个步骤是连续执行。