[英]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.