当事务 DML 操作引发异常时,触发器中会发生啥
Posted
技术标签:
【中文标题】当事务 DML 操作引发异常时,触发器中会发生啥【英文标题】: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 表中有一个触发器。意味着在更新触发器之前将新记录插入到临时表中。查询:
-
如果在作者表中更新时发生异常。因为触发器同时插入新记录。当 select update 语句在事务中时,新记录是否会回滚?
如果在插入新记录时侧触发器中发生异常,那么会发生什么意味着它将更新或回滚作者表?
【问题讨论】:
【参考方案1】:事务的概念是:如果您进行回滚,数据库将恢复到与事务实际启动时完全相同的状态。
遵循此概念,此事务中任何触发器所做的所有更改也会回滚。
实际上,这同样适用于单个语句(如您的示例中),即使没有显式事务 - 此单个语句然后创建一个隐式事务,并且触发器执行是此事务的一部分。如果有任何失败,隐式事务也会回滚,包括触发器的更改,使数据库保持原来的状态。
这是数据库可以保证数据一致性的唯一方法!
【讨论】:
以上是关于当事务 DML 操作引发异常时,触发器中会发生啥的主要内容,如果未能解决你的问题,请参考以下文章