【问题标题】:SQL Server: Is there a need to verify a data modification?SQL Server:是否需要验证数据修改?
【发布时间】:2010-08-28 01:58:01
【问题描述】:

执行插入/更新/删除后,是否需要查询数据库以检查操作是否正确执行?

编辑:

我接受了一个答案,并想用它来说服管理层。

但是,管理层坚持认为插入/更新/删除请求可能在传输过程中被破坏(但网络校验和不会失败吗?),并且我应该检查每笔交易是否正确执行。也许他们依赖于这样一个事实,即损坏数据包的校验和可能与原始数据包的校验和发生冲突。我认为他们把它延伸得太远了,而且很可能不会为我自己的项目这样做。尽管如此,我只是一个初级程序员,没有发言权。

【问题讨论】:

  • 当然,如果在 INSERT/UPDATE/DELETE/TRAN 之后有 rollback
  • 哇!老实说,担心网络传输对数据库事务的潜在影响相当于分析瘫痪。理论上可行吗?是的,但没有人应该担心这一点。以 GUID 为例。有可能发生碰撞,一个天文数字的小碰撞,所以人们担心它。我实际上建议尽快发布关于此问题的后续问题(带有返回此问题的链接)。你应该得到一些好的见解。您可能还想赏金以确保它得到应有的关注。

标签: sql-server


【解决方案1】:

不应该。商业数据库插入/更新/删除(以及所有数据库事务)遵循ACID principle

维基引用:

在计算机科学中,ACID(原子性, 一致性、隔离性、持久性)是 一组保证 处理数据库事务 可靠。

如果您觉得需要仔细检查交易是否成功,那么问题很可能出在您架构的其他地方。

【讨论】:

    【解决方案2】:

    这不是必需的 - 如果查询成功完成,则修改已执行 - 如果查询由于任何原因失败,则整个操作将回滚对于失败的查询,如果有多个查询是批量执行的。

    根据所使用的隔离级别,您的修改完全有可能被另一个“同时”运行的查询所做的修改所取代 - 这是否重要取决于您期望发生的情况在这种情况下。

    【讨论】:

      【解决方案3】:

      你不应该。 您可以使用内置错误处理机制的 SQL(或您的编程平台)来查看是否有错误,以便通知用户发生了不好的事情,否则所有 DB 事务都遵循 ACID(如 Paul 所提到的),这意味着如果在批处理失败,所有批处理都回滚。

      【讨论】:

      • 除非您专门检查单个查询的失败并管理事务,否则批处理中的一个查询失败不会导致整个批处理回滚。
      • @Will A,如果我错了,请纠正我,但事务的一个查询失败不会自动回滚该事务中的所有查询吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多