sql - 在 MS SQL Server 中,有没有办法增加 "atomically"用作计数器的列?

标签 sql sql-server-2005 transactions

假设读取提交快照事务隔离设置,以下语句是否是“原子”的,即您永远不会“丢失”并发增量?

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/

相关文章:

php - 如何将 php 中的日期转换为 SQL 格式? (并插入)

sql - 为什么我在同一个表中的两个日期之间进行选择不起作用?

sql - 如何填补空白?

php - 长时间运行的作业和 SQL 事务

sql - ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取

mysql - 为什么mysql转义会破坏整个查询?

sql - 如何在 SQL 存储过程中实现日志记录和错误报告?

asp.net - 如何创建/使用 MembershipProvider?

java - Spring 3.2 : @WebAppConfiguration breaks existing @Transactional tests

java - Android Room DAO 如何在单个事务中运行多个 DAO 方法?