mysql - mysql中的独占读锁

标签 mysql sql

我有一个表,用于维护和分配输入的一部分(来自一个大输入表),用于流程的多个实例。该表组织如下:

BlockInfo Table
---------------
BlockID int primary key
Status  varchar 

每个进程都查询它应该接受的输入 block ,并处理该 block 。

我希望查询如下:

select BlockID 
from BlockInfo 
order by BlockID 
where Status='available' 
limit 1

为了达到这个效果,我会要求服务器保持独占读锁,因为如果读锁是共享的,那么多个实例可能会得到同一个 block ,这会导致重复努力并且是不可取的。

我可以获得独占写锁,但实际上不能写任何东西。但是我想知道mysql是否允许独占读锁。

了解其他实现方法也会有所帮助。

最佳答案

你应该做的是:

  1. 获取独占写锁
  2. 选择要处理的行
  3. 将其状态更改为“处理中”(或“可用”以外的其他状态)
  4. 解锁 table
  5. 对行进行所有处理
  6. 更新行以将其状态改回“可用”

这将允许其他进程与此同时处理其他行。它使表保持锁定足够的时间,以防止他们尝试在同一行上工作。

关于mysql - mysql中的独占读锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053018/

相关文章:

php - MySQL:WHERE 值大于 Min 且小于 Max

sql - 对于数据库,选择正确的数据类型会影响性能吗?

SQL - 非空或条件

mysql - 复合 where 子句的顺序(MySQL、Postgres)

sql - 子事务处于事件状态时无法回滚 - 错误 2D000

sql - 在sql server中将单条记录变成多条记录

mysql - 如何对sql中多列的相似值进行选择

mysql - 错误 1067 EndDate 默认值无效

java - 我将如何使用 java.util.Collections 来模拟 SQL INNER JOIN 操作?

php - as3、MySQL PHP 连接