如果发生回滚,那么“更新后”触发器会触发吗?
情景:我们假设我们更新了一个A表,A表上的触发器将触发并使用详细信息更新另一个B表。如果由于某些处理错误在A表上发出回滚命令,那么触发器是否会导致B表回滚更改?
是的,它会。
触发器的作用范围在 DML
语句的事务内(由您显式启动或 DML
语句本身隐式启动)。
当此事务被回滚时,所有由触发器进行的更改也将被回滚。
但是,如果你把
PRAGMA autonomous_transaction
将事务嵌入触发器定义中后,触发器将启动自己的事务,您应该在触发器完成之前提交该事务。
请注意 - 如果定义了AFTER UPDATE语句级触发器(没有FOR EACH ROW子句),则如果表上的DML语句失败并回滚,它将不会触发。