mysql儲存過程例項

2021-06-25 19:20:50 字數 3345 閱讀 9438

儲存過程的作用:

第一:儲存過程因為sql語句已經預編繹過了,因此執行的速度比較快。   

第二:儲存過程可以接受引數、輸出引數、返回單個或多個結果集以及返回值。可以向程式返回錯誤原因。     

第三:儲存過程執行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程式執行。     

第四:儲存過程主要是在伺服器上執行,減少對客戶機的壓力。   

第五:儲存過程可以包含程式流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了資料邏輯。   

第六:儲存過程可以在單個儲存過程中執行一系列   sql   語句。   

第七:儲存過程可以從自己的儲存過程內引用其它儲存過程,這可以簡化一系列複雜語句。

其實儲存過程還可以控制許可權,比如乙個表不直接允許使用者直接訪問,但要求允許使用者訪問和修改其中乙個或多個字段,那就可以通過乙個儲存過程來實現並允許該使用者使用該儲存過程。   

還有,如果多條sql語句執行過程中,過程環節返回了資料作為後面環節的輸入資料,如果直接通過sql語句執行,勢必導致大量的資料通過網路返回到客戶機,並在客戶機運算;如果封裝在儲存過程中,則將運算放在伺服器進行,不但減少了客戶機的壓力,同時也減少了網路流量,提高了執行的效率。

下面來簡單地介紹乙個儲存過程的例子:

乙個儲存過程包括名字、引數列表,以及可以包括很多sql語句的sql語句集。下面為乙個儲存過程的定義過程:

create procedure proc_name (in parameter integer)begindeclare variable varchar(20);if parameter=1 thenset variable=』mysql』;elseset variable=』php』;end

if;insert into tb (name) values (variable);end;

mysql中儲存過程的建立以關鍵字create procedure開始,後面緊跟儲存過程的名稱和引數。mysql的儲存過程名稱不區分大小寫,例如proce1()和proce1()代表同乙個存

儲過程名。儲存過程名不能與mysql資料庫中的內建函式重名。

儲存過程的引數一般由3部分組成。第一部分可以是in、out或inout。in表示向儲存過程中傳入引數;out表示向外傳出引數;inout表示定義的引數可傳入儲存過程,並

可以被儲存過程修改後傳出儲存過程,儲存過程預設為傳入引數,所以引數in可以省略。第二部分為引數名。第三部分為引數的型別,該型別為mysql資料庫中所有可用的字

段型別,如果有多個引數,引數之間可以用逗號進行分割。

mysql儲存過程的語句塊以begin開始,以end結束。語句體中可以包含變數的宣告、控制語句、sql查詢語句等。由於儲存過程內部語句要以分號結束,所以在定義儲存過

程前應將語句結束標誌「;」更改為其他字元,並且該字元在儲存過程中出現的機率也應該較低,可以用關鍵字delimiter更改。例如:

mysql>delimiter //

儲存過程建立之後,可用如下語句進行刪除,引數proc_name指儲存過程名。

drop procedure proc_name

實現過程

(1)mysql儲存過程是在「命令提示符」下建立的,所以首先應該開啟「命令提示符」視窗。

(2)進入「命令提示符」視窗後,首先應該登入mysql資料庫伺服器,在「命令提示符」下輸入如下命令:

mysql –u使用者名稱 –p使用者密碼

(3)更改語句結束符號,本例項將語句結束符更改為「//」。**如下:

delimiter //

(4)建立儲存過程前應首先選擇某個資料庫。**如下:

use 資料庫名

(5)建立儲存過程。

(6)通過call語句呼叫儲存過程。

舉一反三

– 建表

use test;

create table user(

id mediumint(8) unsigned not null auto_increment,

name char(15) not null default 」,

pass char(32) not null default 」,

note text not null,

primary key (id)

)engine=innodb charset=utf8;

– 示例一

delimiter //

create procedure proc_name (in parameter integer)

begin

if parameter=0 then

select * from user order by id asc;

else

select * from user order by id desc;

end if;

end;

//delimiter ;

show warnings;

call proc_name(1);

call proc_name(0);

– 示例二

drop procedure proc_name;

delimiter //

create procedure proc_name (in parameter integer)

begin

declare variable varchar(20);

if parameter=1 then

set variable=』windows』;

else

set variable=』linux』;

end if;

select parameter;

end;

//delimiter ;

show warnings;

call proc_name(1);

call proc_name(0);

刪除drop procedure proc_name;

1.show procedure status;

顯示資料庫中所有儲存的儲存過程基本資訊,包括所屬資料庫,儲存過程名稱,建立時間等

2.show create procedure sp_name

顯示某乙個儲存過程的詳細資訊

delimiter //  

drop procedure if exists pro_name;

create procedure pro_name(in parameter integer)

begin

if parameter=0 then 

select * from user order by id asc;

else

select * from user order by id desc;

end if;

end;

MySQL儲存過程例項

9.3 mysql儲存過程 mysql 5.0以後的版本開始支援儲存過程,儲存過程具有一致性 高效性 安全性和體系結構等特點,本節將通過具體的例項講解php是如何操縱mysql儲存過程的。例項261 儲存過程的建立 這是乙個建立儲存過程的例項 錄影位置 光碟 mingrisoft 09 261 例項...

MYSQL儲存過程例項

2 建立租戶公升級儲存過程 drop procedure if exists helpdesk cater upgradetenantdb delimiter create procedure helpdesk cater upgradetenantdb begin declare done int...

mysql 儲存過程例項

引數分為 in out inout in是輸入引數,在儲存過程中不可修改,out是輸出引數,inout是輸入輸出引數 begin 當前日期 declare v curr date varchar 10 mysql中宣告變數時,沒有類似於oracle裡面的rowtype方式 當前時間 declare ...