《MySQL—存儲過程基礎(chǔ)知識》要點:
本文介紹了MySQL—存儲過程基礎(chǔ)知識,希望對您有用。如果有疑問,可以聯(lián)系我們。
儲存過程就是數(shù)據(jù)庫中保留的一系列sql命令的集合,也可以看作是相互之間有關(guān)系的sql命令組織在一起的一個小程序,這些sql命令通常并非簡單地組合在一起,還可以使用各種條件判斷、循環(huán)控制等來實現(xiàn)簡單的sql命令不能實現(xiàn)的復(fù)雜功能.
存儲過程的優(yōu)勢:
1、提高執(zhí)行性能
通常在sql客戶端執(zhí)行sql命令時數(shù)據(jù)庫會有解析到編譯的一個前期過程.而存儲過程則是事先完成了解析、編譯的處理后保留在數(shù)據(jù)庫中的,執(zhí)行時能減輕數(shù)據(jù)庫負擔(dān).
2、可減輕網(wǎng)絡(luò)負擔(dān)
使用存儲過程后,復(fù)雜的數(shù)據(jù)庫操作也可以在數(shù)據(jù)庫服務(wù)器中完成.只需要從應(yīng)用程序傳遞給數(shù)據(jù)庫必要的參數(shù)就行.
3、可防止對表的直接拜訪
可以禁止對表本身的拜訪,只賦予用戶對相關(guān)存儲過程的拜訪權(quán)限,只允許通過儲存過程拜訪表.
4、可將數(shù)據(jù)庫的處理黑匣子化
應(yīng)用程序完全不用考慮儲存過程的內(nèi)部詳細處理,只需要知道調(diào)用那個存儲過程就好了.
使用存儲過程:
創(chuàng)建:
mysql存儲過程語法
上面就是將“處理內(nèi)容”定義成名為 #存儲過程名# 的存儲過程
存儲過程中可以指定參數(shù),參數(shù)分為輸入?yún)?shù)(接受調(diào)用方的數(shù)據(jù),默認),輸出參數(shù)(向調(diào)用方返回處理結(jié)果).使用關(guān)鍵字in、out、inout來指定.inout既是輸入型也是輸出型.
delimiter是改變分隔符的,將默認的分隔符修改成別的符號.默認是[;],因為存儲過程本身就是命令的集合,所以會包括[;],因此使用delimiter來區(qū)分.
例子:
創(chuàng)建存儲過程
存儲過程中可使用的控制語句:
具體的控制語句有條件分支選擇語句、循環(huán)控制語句等.
可使用的控制語句
查看存儲過程:show procedure status;
調(diào)用存儲過程:
call #存儲過程名字#(參數(shù),...)
在調(diào)用存儲過程的時候,如果出現(xiàn)參數(shù)數(shù)目不符(或多或少)的情況,將會顯示錯誤信息.
定義輸出參數(shù):
當指定了out/outin類型的參數(shù)時,通過給參數(shù)名的頭部添加@符號可以將處理結(jié)果保留到out型變量中,然后使用select @變量名來顯示變量信息.
定義當?shù)刈兞浚?局部變量)
在各個條件分支程序塊中,會有一些執(zhí)行相似的代碼,也就是有些執(zhí)行的部分是一樣的,我們可以將這些相同的部分移動到條件判斷外,在分支程序塊中只有檢索條件字符的部分代碼.也就是將檢索條件字符存放在當?shù)刈兞康淖兞恐?
使用局部變量必須用 declare 聲明變量的名稱以及數(shù)據(jù)類型.
declare的語法
給變量賦值:set #變量名# =值
例子:
沒有定義當?shù)刈兞壳暗氖褂茫?/p>
定義了當?shù)刈兞亢蟮氖褂茫?/p>
對比可見,使用當?shù)刈兞匡@然將[select id,author,title from article where author=]相同的部份移到條件判斷外了.
存儲過程的使用:
1、當一個事務(wù)涉及到多個SQL語句時或者涉及到對多個表的操作時就要考慮用存儲過程;
2、當在一個事務(wù)的完成需要很復(fù)雜的業(yè)務(wù)邏輯時例如對多個數(shù)據(jù)的操作或者對多個狀態(tài)的判斷更改等要考慮;
3、還有就是在比擬復(fù)雜的統(tǒng)計和匯總中也要考慮,但是過多的使用存儲過程會降低系統(tǒng)的移植性.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MySQL—存儲過程基礎(chǔ)知識》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7128.html