有人能解釋oracle 10g中的「之前」和「之後」之間的區別嗎?在oracle中觸發之前和之後的區別
回答
首先,我將通過定義觸發開始我的答案是:觸發是當行添加,修改或刪除時運行的存儲過程。
觸發器可以運行前將採取行動或後所採取的操作。
BEFORE
觸發器通常用於在接受更改前進行驗證。它們在對數據庫進行任何更改之前運行。假設您爲銀行運行數據庫。你有一個表accounts
和一個表transactions
。如果用戶從他的賬戶中提款,那麼您需要確保用戶的賬戶中有足夠的餘額用於他的提款。如果accounts
的餘額不足,則BEFORE
觸發器將允許這樣做,並防止在transactions
中插入該行。
AFTER
觸發器通常用於由於更改而需要在單獨的表中更新信息。它們在對數據庫進行更改後運行(不一定提交)。讓我們回到我們的後面的例子。成功交易後,您需要在accounts
表中更新balance
。一個AFTER
觸發器將允許你做到這一點。
+1我只是補充說一些觸發器驗證必須在AFTER行中執行觸發器,因爲只有在AFTER觸發器中列值是「固定的」。在BEFORE觸發器中,您可以驗證並通過一些基於以下值的複雜規則:NEW.col僅用於:NEW.col的值在觸發器中稍後進行更改,以便違反規則。 – 2011-08-10 09:58:46
我不完全確定你對什麼感興趣,所以我會保持這個基礎。
觸發器
- 按名稱之前,這些觸發器之前在表中創建的行解僱。隨後,由於該行尚未創建,因此您可以完全訪問:new.table_element字段。如果嘗試插入/更新不需要/格式錯誤的數據,這可以實現數據清理和統一性。這只是一個基本的例子,但您需要在任何時候需要訪問「:new」數據時使用before觸發器。
觸發器
- 由於後觸發閃光一次,該行已經創建,當你想發生是由於該行的邏輯這些觸發器通常使用後。例如,如果您有地址表並且用戶更新了他/她的地址,那麼您可能需要在創建時更新外部參照表中的地址引用ID(如果您恰好保留了所有舊地址)。此外,與前面的觸發器不同,您無權修改任何列值,因爲表中已存在該行。
BEFORE TRIGGER用於觸發動作應該確定是否允許觸發語句完成。通過使用BEFORE TRIGGERS用戶可以消除不必要的觸發語句處理 但是,在觸發語句後使用AFTER TRIGGERS應該在執行觸發器操作之前完成。
請編輯您現有的答案,而不是重複另一個答案。 – wonea 2012-11-15 09:59:06
- 1. Oracle之前更新觸發
- 2. Oracle之前INSERT觸發器
- 3. 之前和之前有什麼區別?
- 4. Oracle分析函數的窗口子句中的「當前行」和「0之前/之後」之間的任何區別?
- 5. Oracle DATE和TIMESTAMP之間的區別
- 6. 在oracle觸發器之前的總和值
- 7. Qt中的切換和觸發器之間的區別?
- 8. GTEST:分別在SetUp和TearDown之前和之後識別
- 9. 在oracle中cast()之前和之後添加關鍵字
- 10. 觸摸發佈之前和之後獲取座標
- 11. NSTimer在觸發之前觸發
- 12. Backbone.js - 在路由被觸發之前/之後的呼叫方法
- 13. 在main()之前或之後聲明函數有什麼區別?
- 14. 之前和之後在mySql
- 15. 在document.onload之前觸發webViewDidFinishLoad
- 16. X10之前或之後的'async'有什麼區別?
- 17. 在rake任務之前或之後添加RAILS_ENV之間的區別
- 18. 如何在提交之前或之後觸發AJAX請求
- 19. Inotify在刪除之前還是之後觸發IN_DELETE?
- 20. 觸發器和光標之間的區別是什麼?
- 21. 觸發器和鎖存器之間的區別
- 22. 終於和追捕之後的區別
- 23. 插入之前的MySQL和觸發器
- 24. Oracle之前插入觸發器和Hibernate ID生成器設置
- 25. msbuild發佈和包之間的區別
- 26. 調試和發佈之間的區別
- 27. CLOS:在C++之前,之後和之後:在C++中圍繞
- 28. 在插入if語句之前的Oracle觸發器
- 29. SQL Server中數據庫級別觸發器和服務器級別觸發器之間的區別
- 30. WP7:之前和之後:之後
我仍然不確定你在簡單的方面尋找什麼,所以我刪除了我的答案。其他人可能有一個好主意。 – 2010-09-05 13:12:05
對於每個小小的疑問,我都會在堆棧溢出中發佈一個問題,而不會想到.....(我想我不應該這樣做)....我現在理解觸發器的概念。在我發佈這個問題之前,我會考慮... – Jagan 2010-09-05 13:18:13