qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          淺談存儲過程和觸發(fā)器

           說到存儲過程和觸發(fā)器,其實(shí)在以前做機(jī)房收費(fèi)系統(tǒng)的時(shí)候就接觸到了。但是當(dāng)時(shí)總感覺存儲過程和觸發(fā)器是比較高級的東西,這個(gè)系統(tǒng)不用這些東西也可以。于是就一直沒有好好研究這塊知識。現(xiàn)在看牛腩新聞發(fā)布系統(tǒng),再一次涉及到了這個(gè)東東,這才發(fā)現(xiàn),存儲過程和觸發(fā)器并沒有想象的那么高深莫測。也許有人會說:那是你沒有深入研究。是,我承認(rèn),但個(gè)人覺得目前我們還沒有必要那么深入研究。我們要做的就是:用20%的努力,獲得80%的知識。這樣就基本上可以滿足我們?nèi)粘5男枨罅恕O旅婢秃暧^上說一下存儲過程和觸發(fā)器。

            什么是存儲過程呢?官方是這樣定義的,存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。

            1、創(chuàng)建存儲過程語句如下:

          createprocedure 存儲過程名

          @[參數(shù)名] [類型],@[參數(shù)名][類型]

          as

          begin

              自定義的功能

          end

            2、調(diào)用存儲過程

            exec sp_name [參數(shù)名]

            3、刪除存儲過程

            drop proceduresp_name

            其實(shí),說白了,存儲過程就是一類特殊的函數(shù),只要我們給它合適的參數(shù)就可以直接調(diào)用,跟調(diào)用API函數(shù)差不多,唯一不同的就是API函數(shù)大部分是別人寫的,而存儲過程我們一般都是自己寫。

            注意:不能在一個(gè)存儲過程中刪除另一個(gè)存儲過程,只能調(diào)用另一個(gè)存儲過程。

            那么什么是觸發(fā)器呢?嚴(yán)格意思上說,觸發(fā)器就是存儲過程,只不過它的執(zhí)行不是由程序調(diào)用,也不是手工啟動,而是由事件來觸發(fā)。

            創(chuàng)建語句如下:

          CREATE TRIGGER`<databaseName>`.`<triggerName>`

          < [ BEFORE |AFTER ] > < [ INSERT | UPDATE | DELETE ] >

          ON <tableName>

          FOR EACH ROW

          BEGIN

          --do something

          END |

            這時(shí)有人不解了,什么叫由事件來觸發(fā)呢?其實(shí)這和botton按鈕的點(diǎn)擊事件一樣,只不過觸發(fā)器是由Insert、Update、Delete這些動作觸發(fā),而botton的點(diǎn)擊事件是通過點(diǎn)擊的動作來觸發(fā)的。

            那么存儲過程有哪些優(yōu)點(diǎn)呢?

            1、速度快。

            在運(yùn)行存儲過程前,數(shù)據(jù)庫已對其進(jìn)行了語法和句法分析,并給出了優(yōu)化執(zhí)行方案。也就是說,存儲過程在調(diào)用前就已經(jīng)編譯好了,所以存儲過程能以極快的速度執(zhí)行。

            2、存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量 。

            3、保證數(shù)據(jù)的安全性。

            通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。

            4、保證數(shù)據(jù)的完整性。

            通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫的完整性。

            既然存儲過程有如此多的好處,那么我們做項(xiàng)目的時(shí)候是不是用的越多越好呢?答案肯定是NO。萬事都有個(gè)度,存儲過程也一樣。如果在一個(gè)程序系統(tǒng)中大量的使用存儲過程,那么必然會導(dǎo)致它的數(shù)據(jù)結(jié)構(gòu)相當(dāng)復(fù)雜,這樣維護(hù)該系統(tǒng)將會是相當(dāng)困難的一件事。

            讓我們合理使用觸發(fā)器和存儲過程,盡情享受他們帶給我們的方便。

          posted on 2012-05-14 09:57 順其自然EVO 閱讀(186) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 都兰县| 崇文区| 兴仁县| 舒城县| 彰武县| 曲阳县| 莫力| 兴文县| 汕头市| 通州区| 洪雅县| 巴林右旗| 平果县| 浪卡子县| 萝北县| 孟州市| 桂东县| 乌兰县| 横山县| 城固县| 个旧市| 垦利县| 新绛县| 铁岭县| 麻栗坡县| 宁都县| 肃北| 丘北县| 滕州市| 台南市| 新化县| 娱乐| 蕲春县| 客服| 玉林市| 若羌县| 招远市| 汝城县| 渝北区| 雅江县| 通州区|