更新一条记录的两列时,这种变化是原子的吗?

时间:2014-08-12 00:32:53

标签: sql sql-server acid

问题本身主要在主题中定义,我试图用类似的声明更新记录的两列:

UPDATE SomeTableName
SET Field1 = 1,
    Field2 = 2
WHERE ID = 123;

SQL Server中的更改是否是原子的?简单来说,如果在更新操作的中间(或任何其他灾难性事件)发生断电,是否意味着我最终只能更新一个字段?

1 个答案:

答案 0 :(得分:2)

理论上所有事务都是原子的 - 不能保证sql server中没有可能的错误会破坏它。

如果您没有明确说明事务,则每个语句都是自己的事务。

电源故障等不会导致问题,因为重启时会应用事务日志。

ADDED

回复:关于prior question 21468742的评论

对不起,我不这么认为 - 在那里阅读很多,但我没有看到任何违反原子性的东西,它似乎是原子性和孤立的混乱。我看到马丁史密斯得出了同样的结论。可以这样想,当您更新这样的东西时,您通过重写整个块(或数据库基页)来更新磁盘块。使用日志和提交体系结构,整个块都是编写和提交的,或者都不是。在P / F的情况下,最后的良好写入是已知的,并且如果发生失败的写入并且未标记为完成,则在重新启动时不会从tranlog应用于数据库。