【发布时间】:2015-10-16 19:47:25
【问题描述】:
这更像是一个知识分享帖。
最近在我的一个项目中,我遇到了一个很常见的问题,但在我遇到它之前从未真正考虑过它。 有很多可用的解决方案,但不知何故我没有找到我正在寻找的那个,我将在这篇文章中分享。我相信你们中的许多人已经知道以下解决方案,但对于那些不知道的人来说,这绝对可以挽救生命。 :-)
问题:
最近,我正在开发 Windows 服务。该服务应该将一些记录插入到一个长期存在并被其他几个旧服务使用的表中。有一列(比如“ID”)包含一个整数值。将 Integer 插入此表的逻辑(可能是几年前)如下所述:
逻辑:
- 从表中读取一个值(比如表 1 – 名称/值对),
- 将其增加 1
- 更新值和
- 终于得到新值[/highlight]。
代码
SELECT @value = [Value] from [dbo].[Table1] WHERE [Name] = @Name;
UPDATE [dbo].[ Table1] SET [Value] = @value +1 WHERE [Name] = @Name;
SELECT @value = @value+1;
所使用的技术存在重大并发问题。
- 多个线程读取相同的值
- 死锁问题
解决此类问题的最佳方法是什么 - 考虑到许多不同的应用程序/服务都提到了这一点?
【问题讨论】:
-
您能否编辑问题,使其仅包含问题,并使用您的解决方案创建单独的答案?请参阅Can I answer my own question? 了解更多信息。
-
或许还可以添加一些文档链接,
OUTPUT inserted是什么,这是针对所有 rdbms 还是针对特定的一个? -
附件在哪里?
-
感谢输入,添加附件,添加文档链接并将问题和答案分开..
标签: sql multithreading database-concurrency