【发布时间】:2018-04-25 15:47:37
【问题描述】:
我在隔离级别方面遇到了一些问题,并且事务遇到了竞争条件问题。
我有一个带有状态字段的表,并且有 n 个进程访问它。每个事务应该返回status = 1的最旧行,并将状态更改为2。理论上,2个进程应该无法获得相同的注册表。但这并没有发生。由于该行未锁定以供事务读取。
您可以在下面找到交易的伪代码:
- 开始交易;
- 获取状态 = 1 的最旧行(按 date_created 排序);
- 更新行并设置status = 2;
- 提交事务;
竞争条件发生在 2 和 3 之间。因为该行没有为选择锁定。 MariaDB有可能吗?玩隔离级别?这样做的成本是多少?
【问题讨论】:
标签: transactions mariadb isolation-level