天天看點

mysql資料庫存儲過程

存儲過程可以簡單了解為一條或者多條sql語句的集合,存儲過程用來實作将一組關于表的操作的sql語句當作一個整體來執行,存儲過程在實際應用中最主要的特點的事提高執行效率以及sql代碼封裝功能,特别是sql代碼封裝功能,如果沒有存儲過程,在外部程式通路資料庫時(例如php),要組織很多sql語句,特别是業務邏輯比較複雜的時候,一大堆的sql和條件夾在php代碼中,讓人不寒而栗,有了sql存儲過程,業務邏輯可以封裝存儲過程,這樣不僅容易維護,而且執行效率也高。

例如:在電子商務站點中使用存儲過程來實作商品訂單處理

存儲過程如何一門程式設計語言,同樣包含了資料類型,流程控制,輸入和輸出和它自己的函數庫

基本文法

Create procedure sp_nane()  函數裡面可以有參數也可以沒有

Begin

---------  //代碼體

End

Call  sp_nane() 存儲過程名  //調用存儲過程

執行個體mysql>use mysql

Mysql>Delimiter $$ //定義分隔符

Mysql>Create procedure sp_nane()  函數裡面可以有參數也可以沒有

Select user from user;

End$$

Mysql>Delimiter;

方法一show procedure status

執行個體:show procedure status \G

方法二檢視系統表information_schema.routines

執行個體:select * from information_schema.routines\G

方法三通過show crerate procedure語句檢視存儲過程定義資訊

執行個體:show crerate procedure proce_user\G

Drop procedure 存儲過程名字  删的時候不要加().

執行個體:drop procedure proce_param_inout;

循環控制

WHILE ---DO--END WHILE  //先判斷再執行

執行個體:

Mysql>create table t1(id int);

Mysql>Create procedure proce_while()  函數裡面可以有參數也可以沒有

Declare i int;  //定義變量

Set i=1;  //将變量做了一個初始化,如果不做初始化,将為null

While i<5 do

Insert into t1 values(i);

Set i=i+1;

End while;

Pepeat---until end pepeat  先執行再判斷

Mysql>Create procedure proce_repeat()  函數裡面可以有參數也可以沒有

Declare i int default 1;  //定義變量,初始化

repeat  

Until i>=6

End repeat;

Loop--end loop

Mysql>Create procedure proce_loop()  函數裡面可以有參數也可以沒有

Loop_label:loop   //定義一個标号,跟标簽一樣

If  i>=6 then

Leave loop_label;  

End if;

End loop;

Mysql>Create procedure proce_param_in(in id int) //用in傳值傳的是id字段,int類型的

If (id is null) then  //如果id變量是空值

Select ‘id is null’  as id_null;  

Else

Select id as id_inside; //列印一下id的值

Mysql>Create procedure proce_param_out(out id int) //用out傳值傳的是id字段,int類型的

Select id  as id_inside_1;  //id初始值為null

If (id is not null) then  //如果id變量不是空值

Set id=id+1;

Select id as id_inside_2; //列印一下id的值

Select 100 into id;  //把100輸入到id

Select id as id_inside_3;

Mysql>Create procedure proce_param_inout(inout id int) //用out傳值傳的是id字段,int類型的

Select id  as id_inside_1;  //id值為調用者傳進來的值

本文轉自    探花無情   51CTO部落格,原文連結:http://blog.51cto.com/983865387/1917421