觸發器與存儲過程
在數據庫中,觸發器是當表/視圖中發生某些特定事件時自動執行的過程(代碼段)。在它的其他用途中,觸發器主要用於維護數據庫的完整性。存儲過程是一種可供訪問關係數據庫的應用程序使用的方法。通常,存儲過程用作驗證數據和控制對數據庫的訪問的方法。
什麼是觸發器?
觸發器是當數據庫的表/視圖中發生某些特定事件時自動執行的過程(代碼段)。在它的其他用途中,觸發器主要用於維護數據庫的完整性。觸發器還用於強制執行業務規則、審核數據庫中的更改和複製數據。最常見的觸發器是數據操作語言(datamanipulationlanguage,DML)觸發器,在數據**縱時觸發。一些數據庫系統支持非數據觸發器,這些觸發器在數據定義語言(DDL)事件發生時觸發。一些示例是在創建表時、在執行提交或回滾操作等過程中激發的觸發器。這些觸發器特別可用於審核。Oracle數據庫系統支持模式級觸發器(即修改數據庫模式時觸發的觸發器),如創建後、更改前、更改後、刪除前、刪除後等。Oracle支持的四種主要觸發器類型是行級觸發器、列級觸發器、列級觸發器,每行類型觸發器和For Each語句類型觸發器。
什麼是存儲過程?
存儲過程是應用程序訪問關係數據庫時可以使用的方法。通常,存儲過程用作驗證數據和控制對數據庫的訪問的方法。如果某些數據處理操作需要執行多個SQL語句,則這些操作將作為存儲過程實現。調用存儲過程時,必須使用CALL或EXECUTE語句。存儲過程可以返回結果(例如SELECT語句的結果)。這些結果可以被其他存儲過程或應用程序使用。用於編寫存儲過程的語言通常支持if、while、for等控制結構。根據所使用的數據庫系統,可以使用多種語言來實現存儲過程(例如Oracle中的PL/SQL和java、Microsoft SQL Server中的T-SQL(Transact-SQL)和.NET Framework)。此外,MySQL使用自己的存儲過程。
觸發器和存儲過程之間有什麼區別?