qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          淺談存儲過程和觸發器

           說到存儲過程和觸發器,其實在以前做機房收費系統的時候就接觸到了。但是當時總感覺存儲過程和觸發器是比較高級的東西,這個系統不用這些東西也可以。于是就一直沒有好好研究這塊知識。現在看牛腩新聞發布系統,再一次涉及到了這個東東,這才發現,存儲過程和觸發器并沒有想象的那么高深莫測。也許有人會說:那是你沒有深入研究。是,我承認,但個人覺得目前我們還沒有必要那么深入研究。我們要做的就是:用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)  編輯  收藏 所屬分類: 數據庫

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南岸区| 建德市| 梨树县| 玛多县| 武功县| 苗栗市| 孝昌县| 札达县| 保德县| 青州市| 新乡市| 都兰县| 绵竹市| 龙川县| 清流县| 绥滨县| 长治县| 舟山市| 金平| 宜昌市| 句容市| 星座| 尉氏县| 巴彦县| 拉萨市| 南通市| 咸阳市| 双辽市| 全州县| 历史| 栖霞市| 壤塘县| 呼图壁县| 衡东县| 武鸣县| 尼木县| 定结县| 定边县| 眉山市| 巧家县| 遵义县|