存儲過程:
一組可編程的函數,是爲了完成特定功能的sql語句集mysql
經編譯建立並保存在數據庫中,用戶可經過指定存儲過程的名字並給定參數(須要時)來調用執行sql
存儲過程就是具備名字的一段代碼,用來完成一個特定的功能數據庫
建立的存儲過程保存在數據庫的數據字典中express
用存儲過程的好處:
將重複性很高的一些操做封裝到一個存儲過程當中簡化了對這些sql的調用編程
批量處理安全
統一接口,確保數據安全服務器
相對於oracle數據庫來講,mysql的存儲過程相對功能較弱,使用較少oracle
存儲過程的建立和調用:
delimiter $$:
它與存儲過程語法無關函數
delimiter語句將標準分隔符-分號(;)更改成$$工具
由於咱們想將存儲過程做爲總體傳遞給服務器,而不是讓mysql工具一次解釋每一個語句
告訴mysql解釋器,該段命令是否已經結束了,mysql是否能夠執行了,默認狀況下delimiter是分號;,在命令行客戶端中若是有一段命令以分號結束那麼回車後mysql將會執行該命令,但有時候不但願mysql這麼作,在位可能輸入較多的語句且語句中包含有分號,使用delimiter $$,這樣只有當$$出現以後mysql解釋器纔會執行該段語句
建立存儲過程:
create procedure 名稱() begin 語句 end $$
調用存儲過程:
call 名稱();
刪除存儲過程:
drop procedure 名稱;
存儲過程變量:
在存儲過程當中聲明一個變量
使用declare語句:
declare 變量名 數據類型(大小) default 默認值;
能夠聲明一個名爲total_sale的變量,數據類型爲int,默認值爲0
declare total_sale int default 0;
聲明共享數據類型的兩個或多個變量
declare x, y int default 0;
分配變量值:
要爲變量分配一個值,可使用set語句
set total_count = 10;
使用select into語句將查詢的結果分配給一個變量
select count(*) into total_products from products;
變量的範圍:
若是在存儲過程當中聲明一個變量,那麼當達到存儲過程的end語句時,它將超出範圍,所以在其餘代碼塊中沒法訪問
存儲過程參數:
三種類型:
in:表示調用者向過程傳入值(傳入值能夠是字面或變量)
out:表示過程向調用者傳出值
inout:inout參數是in和out參數的組合
定義參數:
create produce name(模式,參數名稱 數據類型(大小))
存儲過程語句:
if語句:
if expression then statements; end if;
或
if expression then statements; else else_statmemts; end if;
case語句:
case case_expression when when_expression_1 then commands when when_expression_2 then commands ... else commands end case;
循環:
while expression do statments end while
或
repeat statments; until expression end repeat
查看存儲過程:
查看全部存儲過程:
show procedure status;
查看指定數據庫的存儲過程
show procedure status where db=數據庫名;
查看指定存儲過程源代碼
show create procedure 存儲過程名;