淺談存儲過程和觸發器
說到存儲過程和觸發器,其實在以前做機房收費系統的時候就接觸到了。但是當時總感覺存儲過程和觸發器是比較高級的東西,這個系統不用這些東西也可以。于是就一直沒有好好研究這塊知識。現在看牛腩新聞發布系統,再一次涉及到了這個東東,這才發現,存儲過程和觸發器并沒有想象的那么高深莫測。也許有人會說:那是你沒有深入研究。是,我承認,但個人覺得目前我們還沒有必要那么深入研究。我們要做的就是:用20%的努力,獲得80%的知識。這樣就基本上可以滿足我們日常的需求了。下面就宏觀上說一下存儲過程和觸發器。
什么是存儲過程呢?官方是這樣定義的,存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。
1、創建存儲過程語句如下:
createprocedure 存儲過程名 @[參數名] [類型],@[參數名][類型] as begin 自定義的功能 end |
2、調用存儲過程
exec sp_name [參數名]
3、刪除存儲過程
drop proceduresp_name
其實,說白了,存儲過程就是一類特殊的函數,只要我們給它合適的參數就可以直接調用,跟調用API函數差不多,唯一不同的就是API函數大部分是別人寫的,而存儲過程我們一般都是自己寫。
注意:不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程。
那么什么是觸發器呢?嚴格意思上說,觸發器就是存儲過程,只不過它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發。
創建語句如下:
CREATE TRIGGER`<databaseName>`.`<triggerName>` < [ BEFORE |AFTER ] > < [ INSERT | UPDATE | DELETE ] > ON <tableName> FOR EACH ROW BEGIN --do something END | |
這時有人不解了,什么叫由事件來觸發呢?其實這和botton按鈕的點擊事件一樣,只不過觸發器是由Insert、Update、Delete這些動作觸發,而botton的點擊事件是通過點擊的動作來觸發的。
那么存儲過程有哪些優點呢?
1、速度快。
在運行存儲過程前,數據庫已對其進行了語法和句法分析,并給出了優化執行方案。也就是說,存儲過程在調用前就已經編譯好了,所以存儲過程能以極快的速度執行。
2、存儲過程可以重復使用,可減少數據庫開發人員的工作量 。
3、保證數據的安全性。
通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。
4、保證數據的完整性。
通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。
既然存儲過程有如此多的好處,那么我們做項目的時候是不是用的越多越好呢?答案肯定是NO。萬事都有個度,存儲過程也一樣。如果在一個程序系統中大量的使用存儲過程,那么必然會導致它的數據結構相當復雜,這樣維護該系統將會是相當困難的一件事。
讓我們合理使用觸發器和存儲過程,盡情享受他們帶給我們的方便。
posted on 2012-05-14 09:57 順其自然EVO 閱讀(187) 評論(0) 編輯 收藏 所屬分類: 數據庫