小编Sou*_*rav的帖子

SQL 计数器增量并发问题 - 选择/更新问题

这更像是一个知识共享帖子。

最近在我的一个项目中,我遇到了一个很常见的问题,但在我遇到它之前从未真正考虑过它。有许多解决方案可用,但不知何故我没有找到我正在寻找的解决方案,我将在这篇文章中分享。我相信你们中的许多人已经知道以下解决方案,但对于那些不知道的人来说,这绝对可以挽救生命。:-)

问题:

最近,我正在研究一个 Windows 服务。该服务应该将一些记录插入一个长期存在并被其他几个旧服务使用的表中。有一列(比如“ID”)保存一个整数值。将整数插入到该表中的逻辑(可能是几年前)如下所述:

逻辑:

  1. 从表中读取一个值(比如表 1 – 名称/值对),
  2. 将其增加 1
  3. 更新值和
  4. 最后得到新值[/highlight]。

代码

SELECT @value = [Value] from [dbo].[Table1] WHERE [Name] = @Name;
UPDATE [dbo].[ Table1] SET [Value] = @value +1  WHERE [Name] = @Name;
SELECT @value = @value+1;
Run Code Online (Sandbox Code Playgroud)

所使用的技术存在重大并发问题。

  1. 多个线程读取相同的值
  2. 死锁问题

解决此类问题的最佳方法是什么 - 考虑到许多不同的应用程序/服务都提到了这一点?

sql multithreading database-concurrency

6
推荐指数
1
解决办法
2456
查看次数

标签 统计

database-concurrency ×1

multithreading ×1

sql ×1