3

我在 C# 中编写了一个简单的 Web 服务(asmx)

客户端使用 post 和 title 参数访问 web 服务,并期望服务返回一个对象,其中包含有关该标题键的更多详细信息。

我面临的问题是,在我的网络服务执行开始时,我检查提供给我的标题是否存在于我的数据库中。如果不是,我构建正确的对象,我将它保存到我的数据库中以备将来搜索以避免重建它(因为我使用第三方 Web 服务进行构建),然后我以 json 格式发回客户询问的对象为了。

然而,这会导致竞争情况,因为 2 个客户端可能会请求相同的标题,并最终将同一对象插入数据库两次,因为其中一个客户端速度不够快,无法在另一个客户端请求之前写入该对象。

我使用 Mysql 数据库,我想弄清楚如何避免这种赛车情况?

密钥是存储过程吗?

我该如何解决这个问题?

注意:我的数据库中的关键是标题列和年份列。

提前致谢

4

2 回答 2

4

您可以在列上添加 SQL Server UNIQUE 约束以强制唯一性。如果出现竞争条件,您可以通过捕获它并简单地再次查询标题来处理服务代码中的错误(来自约束)。

于 2012-12-07T22:00:40.593 回答
1

在数据库中的标题上放置一个唯一键(或者标题的哈希可能更快)。即使第一次尝试选择该行时该行不存在,第二次调用也会得到一个 DUPLICATE KEY 异常。

于 2012-12-07T22:01:58.013 回答