標籤:procedure 程式設計 電子商務 sql語句 實際應用
預存程序簡介
預存程序可以簡單理解為一條或者多條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() 函數裡面可以有參數也可以沒有
Begin
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>Delimiter $$ //定義分隔字元
Mysql>create table t1(id int);
Mysql>Create procedure proce_while() 函數裡面可以有參數也可以沒有
Begin
Declare i int; //定義變數
Set i=1; //將變數做了一個初始化,如果不做初始化,將為null
While i<5 do
Insert into t1 values(i);
Set i=i+1;
End while;
End$$
Mysql>Delimiter;
Pepeat---until end pepeat 先執行再判斷
執行個體:
Mysql>Delimiter $$ //定義分隔字元
Mysql>Create procedure proce_repeat() 函數裡面可以有參數也可以沒有
Begin
Declare i int default 1; //定義變數,初始化
repeat
Insert into t1 values(i);
Set i=i+1;
Until i>=6
End repeat;
End$$
Mysql>Delimiter;
Loop--end loop
執行個體:
Mysql>Delimiter $$ //定義分隔字元
Mysql>Create procedure proce_loop() 函數裡面可以有參數也可以沒有
Begin
Declare i int default 1; //定義變數,初始化
Loop_label:loop //定義一個標號,跟標籤一樣
Insert into t1 values(i);
Set i=i+1;
If i>=6 then
Leave loop_label;
End if;
End loop;
End$$
Mysql>Delimiter;
輸入輸出類型1)
In 往預存程序裡面傳參,預存程序內部會改變數值,調用者是不會看到的
執行個體:
Mysql>Delimiter $$ //定義分隔字元
Mysql>Create procedure proce_param_in(in id int) //用in傳值傳的是id欄位,int類型的
Begin
If (id is null) then //如果id變數是空值
Select ‘id is null’ as id_null;
Else
Set i=i+1;
End if;
Select id as id_inside; //列印一下id的值
End$$
Mysql>Delimiter;
2)
Out預存程序內部傳值給調用者,不接受外部傳值的
執行個體:
Mysql>Delimiter $$ //定義分隔字元
Mysql>Create procedure proce_param_out(out id int) //用out傳值傳的是id欄位,int類型的
Begin
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的值
Else
Select 100 into id; //把100輸入到id
End if;
Select id as id_inside_3;
End$$
Mysql>Delimiter;
3)
inout 可以接受調用者的傳值,而且還會把最後改變的結果返回給調用者
執行個體:
Mysql>Delimiter $$ //定義分隔字元
Mysql>Create procedure proce_param_inout(inout id int) //用out傳值傳的是id欄位,int類型的
Begin
Select id as id_inside_1; //id值為調用者傳進來的值
If (id is not null) then //如果id變數不是空值
Set id=id+1;
Select id as id_inside_2; //列印一下id的值
Else
Select 100 into id; //把100輸入到id
End if;
Select id as id_inside_3;
End$$
Mysql>Delimiter;
本文出自 “快樂學習” 部落格,請務必保留此出處http://983865387.blog.51cto.com/9838888/1917421
mysql資料庫預存程序