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

时间:2015-09-01 06:01:30

标签: mysql transactions isolation

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

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;

我怀疑可能会出现竞争状况。如果我有大约同时运行的上述2个查询,它们都会成功吗?

1 个答案:

答案 0 :(得分:0)

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

只有一个一个。

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

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

所以,永远是好的。

BTW你的查询中没有任何内容可以破坏事情,即使两者同时成功(如果可能的话)......