假设读取提交快照事务隔离设置,以下语句是否是“原子”的,即您永远不会“丢失”并发增量?
update mytable set counter = counter + 1
我认为在一般情况下,如果此更新语句是较大事务的一部分,则事实并非如此。例如,我认为这种情况是可能的:
- 更新事务 #1 中的计数器
- 做一些其他事情 在事务 #1 中
- 更新计数器 交易#2
- 提交 交易#2
- 提交事务#1
在这种情况下,计数器不是只会增加 1 吗?如果这是事务中唯一的语句,会有什么不同吗?
像 stackoverflow 这样的网站如何为其问题查看计数器处理此问题?或者“失去”一些增量的可能性是否被认为是可以接受的?
最佳答案
根据MSSQL帮助,你可以这样做:
UPDATE tablename SET counterfield = counterfield + 1 OUTPUT INSERTED.counterfield
这会将字段更新 1,并以 SQL 记录集的形式返回更新后的值。
关于sql - 在 MS SQL Server 中,有没有办法增加 "atomically"用作计数器的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/193257/