【问题标题】:What happens in a trigger when an transaction DML operation throws an exception当事务 DML 操作引发异常时,触发器中会发生什么
【发布时间】:2016-05-11 09:36:54
【问题描述】:

SQLServer 中的以下代码:

BEGIN TRY

  BEGIN TRANSACTION TRAN
    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391';

  COMMIT TRAN    
END TRY

BEGIN CATCH 
   ROLLBACK TRAN
END CATCH

在 authors 表中有一个触发器。意味着在更新触发器之前将新记录插入到临时表中。查询:

  1. 如果在作者表中更新时发生异常。因为触发器同时插入新记录。当 select update 语句在事务中时,新记录是否会回滚?
  2. 如果在插入新记录时侧触发器中发生异常,那么会发生什么意味着它将更新或回滚作者表?

【问题讨论】:

    标签: sql-server triggers transactions


    【解决方案1】:

    事务的概念是:如果您进行回滚,数据库将恢复到与事务实际启动时完全相同的状态。

    遵循此概念,此事务中任何触发器所做的所有更改也会回滚。

    实际上,这同样适用于单个语句(如您的示例中),即使没有显式事务 - 此单个语句然后创建一个隐式事务,并且触发器执行是此事务的一部分。如果有任何失败,隐式事务也会回滚,包括触发器的更改,使数据库保持原来的状态。

    这是数据库可以保证数据一致性的唯一方法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 2011-03-23
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多