mysql儲存過程詳解

2022-08-27 15:45:18 字數 2767 閱讀 9377

儲存過程procedure是一組為了完成特定功能的sql語句集合,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名稱並給出引數來執行。

儲存過程中可以包含邏輯控制語句和資料操縱語句,它可以接受引數、輸出引數、返回單個或多個結果集以及返回值。

由於儲存過程在建立時即在資料庫伺服器上進行了編譯並儲存在資料庫中,所以儲存過程執行要比單個的sql語句塊要快。同時由於在呼叫時只需用提供儲存過程名和必要的引數資訊,所以在一定程度上也可以減少網路流量、簡單網路負擔。

* 儲存過程的優點

a、 儲存過程允許標準元件式程式設計

儲存過程建立後可以在程式中被多次呼叫執行,而不必重新編寫該儲存過程的sql語句。而且資料庫專業人員可以隨時對儲存過程進行修改,但對應用程式源**卻毫無影響,從而極大的提高了程式的可移植性。

b、 儲存過程能夠實現較快的執行速度

如果某一操作包含大量的t-sql語句**,分別被多次執行,那麼儲存過程要比批處理的執行速度快得多。因為儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的儲存計畫。而批處理的t-sql語句每次執行都需要預編譯和優化,所以速度就要慢一些。

c、 儲存過程減輕網路流量

對於同乙個針對資料庫物件的操作,如果這一操作所涉及到的t-sql語句被組織成一儲存過程,那麼當在客戶機上呼叫該儲存過程時,網路中傳遞的只是該呼叫語句,否則將會是多條sql語句。從而減輕了網路流量,降低了網路負載。

d、 儲存過程可被作為一種安全機制來充分利用

系統管理員可以對執行的某乙個儲存過程進行許可權限制,從而能夠實現對某些資料訪問的限制,避免非授權使用者對資料的訪問,保證資料的安全。

* mysql儲存過程的用法

-- 檢視當前資料庫的儲存過程

show procedure status where db='wlx';

-- 自定義函式

create procedure pr_add

( a int,

b int

)begin

declare c int;

if a is null then

set a = 0;

end if;

if b is null then

set b = 0;

end if;

set c = a + b;

select c as sum;

end;

-- 呼叫儲存過程

call pr_add(10, 20);

call pr_add(null,null);

詳細說明如下:

根據儲存過程中引數的目的,mode可以是in,out或inout。

param_name是引數的名稱。引數的名稱必須遵循mysql中列名的命名規則。

在引數名之後是它的資料型別和大小。和變數一樣,引數的資料型別可以是任何有效的mysql資料型別。

在上面的儲存過程中,如果儲存過程有多個引數,則每個引數由逗號(,)分隔。我們先來看in模式中,使用getofficebycountry儲存過程中的in引數來查詢選擇位於特定國家/地區的辦公室的例項:

in模式

use `wlx`;

drop procedure if exists `getuserinfo`;

delimiter $$

use `wlx`$$

create procedure getuserinfo(in usernameparam varchar(255))

begin

select *

from wlx_user

where username = usernameparam;

end$$

delimiter ;

call getofficebycountry('usa');

out模式

use `wlx`;

drop procedure if exists `getusercount`;

delimiter $$

create procedure getusercount(

in usernameparam varchar(25),

out total int)

begin

select count(id)

into total

from wlx_user

where username = usernameparam;

end$$

delimiter ;

call getusercount("string",@total)

select @total;

inout模式

delimiter $$

create procedure set_counter(inout count int(4),in inc int(4))

begin

set count = count + inc;

end$$

delimiter ;

set @counter = 1;

call set_counter(@counter,1); -- 2

call set_counter(@counter,1); -- 3

call set_counter(@counter,5); -- 8

select @counter; -- 8

MySQL儲存過程詳解 mysql 儲存過程

儲存過程簡介 我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。乙個儲存過程是乙個可程式設計的...

MySql儲存過程詳解

sql語句需要先編譯然後執行,而儲存過程是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫它。儲存過程是可程式設計的函式,在資料庫中建立並儲存,可以由sql語句和控制結構組成。當想要在不同的應用程式或平台上執行相同的函...

MySQL儲存過程詳解

我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。乙個儲存過程是乙個可程式設計的函式,它在資料...