4

我希望你能在一些 SQL 理论方面帮助我,因为我不是 100% 确定它是如何工作的。

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

AFTER DELETE ON xxxx

我想知道在事务管理方面这到底什么时候会触发?

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

如果是这样,那么我假设如果我的删除语句上的提交有效但触发器由于某种原因失败,那么只有触发器将被回滚,并且我执行的原始执行删除语句仍将被提交(因为我已经定义了它作为删除后)。

有人可以确认一下吗?

谢谢。

4

3 回答 3

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

于 2013-10-04T10:16:21.393 回答
2

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

所以删除触发器在你执行删除命令的那一刻被执行。当这作为事务发生并且您回滚它时,触发的删除也会回滚。

于 2013-10-04T10:17:46.967 回答
1

AFTER DELETE 触发器在删除语句执行后、控制权返回给用户之前触发 - 即,他将触发器中的删除语句和在它之后执行的代码视为单个操作(假设触发器只执行 DML没有什么比调用 UTL_TCP 更时髦的了 :-))。

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

于 2013-10-04T10:15:57.693 回答