資料庫儲存過程
儲存過程(stored procedure
)是在大型
資料庫系統中,一組為了完成特定功能的sql
語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。優點
①重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。
②減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。
③安全性。引數化的儲存過程可以防止sql
注入式攻擊,而且可以將
grant
、deny
以及revoke
許可權應用於儲存過程。
簡單講:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般
sql語句每執行一次就編譯一次
,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時
(如對多個表進行
update,insert,query,delete時)
,可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用
,可減少資料庫開發人員的工作量
4.安全性高
,可設定只有某些使用者才具有對指定儲存過程的使用權
有一點需要注意的是,一些網上盛傳的所謂的儲存過程要比sql
語句執行更快的說法,實際上是個誤解,並沒有根據,包括微軟內部的人也不認可這一點,所以不能作為正式的優點,希望大家能夠認識到這一點。缺點
1:除錯麻煩,但是用
pl/sql developer
除錯很方便!彌補這個缺點。
2:移植問題,資料庫端**當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。
3:重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。
4: 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
資料庫觸發器
觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而被直接呼叫。當對某一表進行諸如update
、 insert
、 delete
這些操作時,
sql server
就會自動執行觸發器所定義的
sql
語句,從而確保對資料的處理必須符合由這些
sql
語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外來鍵所不能保證的複雜的參照完整性和資料的一致性。除此之外,觸發器還有其它許多不同的功能:
(1) 強化約束
(enforce restriction)
觸發器能夠實現比check
語句更為複雜的約束。
(2) 跟蹤變化
auditing changes
觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。
(3) 級聯執行
(cascaded operation)
。觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外乙個表的資料操作(
如刪除,更新,插入
)而該操作又導致該錶上觸發器被觸發。
(4) 儲存過程的呼叫
(stored procedure invocation)
。為了響應資料庫更新,
觸發器可以呼叫乙個或多個儲存過程,甚至可以通過外部過程的呼叫而在dbms(
資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高階形式的業務規則或複雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在資料修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外乙個表的同一型別(insert
、 update
、 delete)
的多個觸發器能夠對同一種資料操作採取多種不同的處理。
總體而言,觸發器效能通常比較低。當執行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在記憶體中也不在資料庫裝置上,而刪除表和插入表總是位於記憶體中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
資料庫 儲存過程與觸發器
儲存過程是儲存在資料庫目錄中的一段宣告性sql語句。儲存過程是資料庫中的乙個重要物件,使用者通過指定儲存過程的名字並給出引數來執行它。儲存過程的優點 增強了sql語句的功能和靈活性 不需要反覆建立一系列處理步驟,保證了資料的完整性 降低了網路的通訊量,客戶端呼叫儲存過程只需要傳儲存過程名和相關引數即...
資料庫原理 儲存過程與觸發器
1 要求 1 執行儲存過程時,實引數等於儲存過程中形引數 實引數少於儲存過程中形引數 2 執行儲存過程 通過對錶操作觸發激發觸發器執行並檢視結果。實驗環境 mysql 實驗步驟 1 定義儲存過程 建立乙個能向學生表student中插入一條記錄的儲存過程insert student,該儲存過程需要五個...
資料庫儲存過程和觸發器
建立儲存過程 create procedure titles sum title varchar 40 sum money output asselect sum sum price from titles where title like title godeclare totalcost mon...