清单中的每个项目(库存)都建模为一行。
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个查询,它们都会成功吗?
答案 0 :(得分:0)
它们不会完全同时完成(对于一个数据库)。
只有一个一个。
1 - 成功。 (受影响的行可能> 0)
2 - 没有成功。 (受影响的行= 0)
所以,永远是好的。
BTW你的查询中没有任何内容可以破坏事情,即使两者同时成功(如果可能的话)......