所以我在ASP.NET Core中使用SQLite为我的存储库构建一个准系统电子商务站点。我用我正在调用的“产品库存”来跟踪我商店中产品的库存情况。持有的表有一个名为' Stock'的整数列。现在我从不希望库存为负数,因此即使我在更新查询之前检查了软件,但仍有可能两个用户大致同时检出,导致两个更新查询可能导致否定。所以我想我使用case语句来确定要减去多少。这是我到目前为止所提出的。
UPDATE [ProductInventory]
SET [Stock] = CASE WHEN [Stock] >= X Then [Stock] - X Else [Stock] = 0
END WHERE [ID] = 1
在上面的示例中,X是占位符,表示我希望从Stock列中扣除的金额。
我无法弄清楚如何获取有关扣除多少的信息?我的猜测是我在这里使用了错误的SQL查询,或者我的想法完全错误,我们将非常感谢任何帮助。
答案 0 :(得分:2)
我认为你正在咆哮错误的树,老板。使用数据库事务会好得多。在事务中,您可以对多个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语句的函数。我的观点是,如果您要使用交易,那么如果您在第一个电子商务交易中间发生另一个电子商务交易,则第二个电子商务交易必须等到第一个数据库交易提交。数据库不可能处于无效状态,例如负数量的库存。
祝你的电子商务网站好运!