我希望你能帮我解决一些SQL理论,因为我不能100%肯定这是如何工作的。
如果我有一个触发器,我将其定义为
AFTER DELETE ON xxxx
我想知道在交易管理方面究竟会引发什么?
因此,如果我从表中删除一条记录,我认为在我输入commit并完成事务之前触发器不会触发。这是对的吗?
如果是这样,那么我假设如果我的delete语句的提交有效,但触发器因某种原因失败,那么只会回滚触发器,并且我执行的原始执行的delete语句仍将被提交(因为我将它定义为AFTER DELETE)。
请有人确认一下吗?
感谢。
答案 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语句。