何时触发AFTER DELETE触发器

时间:2013-10-04 10:11:36

标签: sql

我希望你能帮我解决一些SQL理论,因为我不能100%肯定这是如何工作的。

如果我有一个触发器,我将其定义为

AFTER DELETE ON xxxx

我想知道在交易管理方面究竟会引发什么?

因此,如果我从表中删除一条记录,我认为在我输入commit并完成事务之前触发器不会触发。这是对的吗?

如果是这样,那么我假设如果我的delete语句的提交有效,但触发器因某种原因失败,那么只会回滚触发器,并且我执行的原始执行的delete语句仍将被提交(因为我将它定义为AFTER DELETE)。

请有人确认一下吗?

感谢。

3 个答案:

答案 0 :(得分:4)

1. You delete a row on TABLE1 no COMMIT;
2. TRIGGER performs an action (This takes place before COMMIT or ROLLBACK for step1, but trigger will not have any commit or rollback in it)
3a. You apply commit - Both step1 and step2 gets completed .
3b. You apply rollback- Both step1 and step2 rolled back.

要么给3a或3b

答案 1 :(得分:2)

SQL触发器的目的是确保引用一致性。但是当它们在单独的事务提交中被执行时,它们可能会使数据处于不一致状态。

因此,删除触发器会在您执行delete命令时执行。当这种情况发生在事务中并且您将其回滚时,触发的删除也会回滚。

答案 2 :(得分:0)

执行delete语句之后,在控件返回给用户之前触发AFTER DELETE触发器 - 即,他将delete语句和触发后执行的代码视为单个操作(假设触发器)只是做DML并没有像调用UTL_TCP那样时髦: - ))。

这与事务管理无关 - 一旦DELETE和AFTER DELETE触发器执行,您可以选择提交,回滚或继续在同一事务中执行DML语句。