2013-10-04 95 views
3

我希望你能幫助我理解一些SQL理論,因爲我不能100%確定它是如何工作的。何時發生AFTER DELETE觸發器

如果我有一個觸發器,我把它定義爲

AFTER DELETE ON xxxx 

我不知道確切時間,這將火,在交易管理方面?

因此,如果我從我的表中刪除記錄,我認爲觸發器不會觸發,直到我鍵入提交併完成交易。它是否正確?

如果是這樣,那麼我認爲如果我的刪除語句提交工作,但由於某種原因觸發器失敗,那麼只有觸發器會回滾,並且我執行的原始執行的刪除語句仍將被提交(因爲我把它定義爲AFTER DELETE)。

有人可以證實嗎?

謝謝。

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

回答

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

+0

完美的解釋,謝謝! –

0

AFTER DELETE觸發器在執行delete語句之後並且在將控制權返回給用戶之前觸發 - 即他將觸發器中的刪除語句和代碼之後執行的代碼視爲單個動作(假設觸發器只是執行DML,並沒有像調用UTL_TCP那樣簡單:-))。

這與事務管理無關 - 一旦DELETE和AFTER DELETE觸發器執行,您可以選擇提交,回滾或繼續在同一事務中執行DML語句。

2

的SQL觸發的目的是爲了確保引用一致性。但是當它們在單獨的事務提交中執行時,它們可能會使數據處於不一致的狀態。

因此,在您執行刪除命令時執行刪除觸發器。當這種情況發生爲事務並將其回滾時,觸發的刪除也會回滾。