【问题标题】:When updating two columns of one record, is such change is atomic?更新一条记录的两列时,这种更改是原子的吗?
【发布时间】:2014-08-12 00:32:53
【问题描述】:

问题本身主要是在主题中定义的,我正在尝试用类似的语句更新记录的两列:

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

SQL Server 中的更改是原子的还是非原子的?简而言之,如果在更新操作过程中发生断电(或任何其他灾难性事件),是否意味着我只能更新一个字段?

【问题讨论】:

标签: sql sql-server acid


【解决方案1】:

理论上所有事务都是原子的——不能保证 sql server 中的任何可能的错误都不会破坏这一点。

如果您不指定显式事务,则每个语句都是其自己的事务。

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

添加

回复:评论prior question 21468742

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
相关资源
最近更新 更多