gpt4 book ai didi

sql-server - 如何处理网站中sql并发问题

转载 作者:行者123 更新时间:2023-12-02 14:46:07 25 4
gpt4 key购买 nike

我正在使用 asp.net mvc 制作一个网站。我有一张看起来像这样的 table

Create Table Items(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Colname] [nvarchar](20) NOT NULL
//OTHER UNIMPORTANT COLS HERE
)

ALTER TABLE Items ADD CONSTRAINT UN_Colanme UNIQUE(Colname)

在我的网站上,我经常尝试创建新项目,或从数据库中选择项目(使用 Entity Framework )。这是它在 C# 中的样子

var item = db.Items.FirstOrDefault(i => i.Colname == "foo");
if(item == null)
{
item = new Item("foo");
db.Items.Add(item);
}

//some stuff with item
db.SaveChanges();

有时,2 个请求同时进入,都试图创建具有相同 colname 的项目。虽然唯一约束可以防止数据库存储任何错误值,但尝试保存更改会引发异常,因为违反了约束。

捕获此异常是处理此问题的正常方法吗?如果我不使用上面的 C# 代码,而是创建一个锁定表的存储过程,然后仅在允许的情况下插入新行,然后返回该行,我可以获得良好的性能吗?这通常是这样做的吗?

最佳答案

嗯,有很多方法可以做到这一点。我想说在这种情况下捕获异常是最便宜的。另一种方法是将事务隔离级别提高到更高的级别,例如可序列化。

但在这种情况下,我只会捕获唯一约束违规并继续。如果我们太从编程角度思考,我们可以像double-checked locking这样考虑这种情况。 ,因为我们检查它不在那里,然后进入交易,看到它在那里,然后我们可以丢弃我们的值并使用那里的值。

关于sql-server - 如何处理网站中sql并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com