因此,我正在使用SQLite为我的存储库在ASP.NET Core中构建一个准系统电子商务网站。我使用所谓的“ ProductInventory”表跟踪商店中产品的库存,该表包含一个称为“ Stock”的整数列。现在,我不再希望库存为负数,因此,即使我在进行更新查询之前已经在软件中进行过检查,仍然有可能两个用户可能在大约同一时间结帐,从而导致两个更新查询可能导致结果为负数。因此,我认为我使用了一个case语句来确定要减去的金额。到目前为止,这是我想出的。
UPDATE [ProductInventory]
SET [Stock] = CASE WHEN [Stock] >= X Then [Stock] - X Else [Stock] = 0
END WHERE [ID] = 1
在上面的示例中,X是占位符,表示我希望从“库存”列中扣除的金额。
我不知道要如何扣除有关扣除的信息?我的猜测是我在这里使用了错误的SQL查询,或者我完全有错误的主意,我们将不胜感激。
我认为您在树错树,老板。使用数据库事务会更好。在事务中,您可以对多个SQL语句进行分组。所有的语句一起执行,它们一起成功,否则回滚。这是一些C#伪代码:
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
using SQLiteTransaction dbTransaction = conn.BeginTransaction())
{
if (StockIsAvailable())
{
DecreaseStock();
IncreaseCashBalance();
}
dbTransaction.Commit();
}
}
在我的例子,StockIsAvailable()
,DecreaseStock()
,并且IncreaseCashBalance()
是在数据库上执行SQL语句的功能。我的观点是,如果您要使用事务,那么如果您在第一个电子商务事务的中间又要进行另一个电子商务事务,那么第二个电子商务事务将不得不等到第一个数据库事务提交之后。数据库不可能处于无效状态,例如库存量为负数。
祝您电子商务网站好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句