繁体   English   中英

MySQL查询中的竞争条件? 减少库存

[英]Race condition in MySQL query? Reducing inventory

库存中的每个项目(库存)都建模为一行。

stock
=====
code: primary key
itemType: foreign key to items table
available: boolean

因此,要减少库存,需要执行以下操作:

UPDATE stock SET available = false where code = 'something' and available = true

这是在事务中完成的。 所以看起来像:

BEGIN TRANSACTION;
UPDATE stock SET available = false where code = 'something1' and available = true;
UPDATE stock SET available = false where code = 'something2' and available = true;
UPDATE stock SET available = false where code = 'something3' and available = true;
COMMIT;

我怀疑比赛条件是可能的。 如果我有大约两个同时运行上述查询,它们都会成功吗?

它们不会完全同时(对于一个数据库)完成。

一一只有。

1-成功。 (受影响的行可能> 0)

2-不成功。 (受影响的行= 0)

所以一切都OK。

顺便说一句,即使两个都同时成功(如果可能的话),您的查询中也没有任何东西可以破坏事情...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM