何时触发AFTER DELETE触发器?

4
我希望你能帮我解决一些 SQL 理论问题,因为我不太确定它的工作原理。
如果我有一个触发器并将其定义为:
AFTER DELETE ON xxxx

我在想这个触发器在事务管理方面会在什么时候触发?
所以,如果我从我的表中删除一条记录,我认为直到我键入提交并完成事务,触发器才不会触发。这正确吗?
如果是这样的话,那么我假设如果我的删除语句上的提交成功,但是由于某些原因触发器失败了,那么只有触发器会被回滚,我执行的原始删除语句仍然会被提交(因为我将其定义为AFTER DELETE)。
请有人确认一下这个问题吗?
谢谢。

你使用哪种数据库管理系统?Postgres?Oracle? - user330315
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


2
SQL触发器的目的是确保引用一致性。但是,如果它们在单独的事务提交中执行,可能会导致数据处于不一致的状态。
因此,在执行删除命令时立即执行删除触发器。如果将其作为事务进行并回滚,则触发的删除也将被回滚。

1

在执行删除语句之后,会触发AFTER DELETE触发器,在控制权返回给用户之前-也就是说,用户将删除语句和触发器中执行的代码视为单个操作(假设触发器仅执行DML且不调用UTL_TCP等奇怪的东西)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接