MySQL儲存過程

2021-10-03 15:38:34 字數 4890 閱讀 2297

參考:鏈結

儲存過程(stored procedure)是一種在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料庫物件。儲存過程是為了完成特定功能的sql語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。儲存過程思想上很簡單,就是資料庫 sql 語言層面的**封裝與重用。

儲存過程語法

create

procedure 名稱(

)begin..

....

...end

-- example

create

procedure test(

)begin

select

*from students;

select

*from teachers;

end;

-- 呼叫

call test(

);

id name

1 zsdf

2 skt

3 ig

create

procedure testiname(

)begin

-- 使用 declare語句宣告乙個變數

declare username varchar(32

)default'';

-- 使用set語句給變數賦值

set username=

'***'

;-- 將users表中id=1的名稱賦值給username

select name into username from users where id=1;

-- 返回變數

select username;

end;

變數的宣告使用declare,一句declare只宣告乙個變數;

變數具有資料型別和長度,與mysql的sql資料型別保持一致;

變數可以通過set來賦值,也可以通過select into的方式賦值(結合表中的資料一起使用);

變數返回使用select語句,例如:select 變數名。

變數作用域說明(這個和全域性變數區域性變數是一致的)

儲存過程中變數是有作用域的,作用範圍在begin和end塊之間,end結束變數的作用範圍即結束。

需要多個塊之間傳值,可以使用全域性變數,即放在所有**塊之前

create

procedure 名稱([in

|out

|inout

] 引數名 引數資料型別 )

begin..

....

...end

傳入引數:型別為in,表示該引數的值必須在呼叫儲存過程事指定,如果不顯示指定為in,那麼預設就是in型別。

in型別引數一般只用於傳入,在呼叫過程中一般不作為修改和返回

create

procedure testin(userid int

)begin

declare username varchar(32

)default'';

select name into username from users where id=userid;

select username;

end;

-- 呼叫

call testin(2)

;

傳出引數:在呼叫儲存過程中,可以改變其值,並可返回;

out是傳出引數,不能用於傳入引數值;

呼叫儲存過程時,out引數也需要指定,但必須是變數,不能是常量;

-- 效果和上例相同

create

procedure testout(

in userid int

,out username varchar(32

))begin

select name into username from users where id=userid;

end;

-- 呼叫方式

set@name=''

;set

@id=2;

call testout(

@id,

@name);

select

@name

;

可變變數inout:呼叫時可傳入值,在呼叫過程中,可修改其值,同時也可返回值

create

procedure testinout(

inout userid int

,inout username varchar(32

))begin

set userid=2;

set username='';

select id,name into userid,username from users where id=userid;

end;

-- 呼叫

set@name=''

;set

@id=2;

call testinout(

@id,

@name);

select

@name

,@id

;

-- 單條件if(

)then..

.else..

.endif;

-- 多重條件if(

)then..

.elseif()

then..

.else..

.end

if;

question:使用者id是偶數則返回name,否則返回id

create

procedure testsif(

in usersid int

)begin

declare usersname varchar(32

)default'';

if(userid%2=

0)then

select name into usersname from users where id=usersid;

select usersname;

else

select usersid;

endif

;end

;-- 呼叫

call testsif(1)

;call testsif(2)

;

question:插入1-10號

-- 基本結構

while

(表示式)do.

....

.end

while

;-- example(插入1-10號)

create

procedure test(

)begin

declare i int

default0;

while

(i<10)

dobegin

select i;

set i=i+1;

insert

into users(id)

values

(i);

end;

endwhile

;end

;

question:插入1-10號

-- 基本結構

repeat..

.until...

endrepeat

;-- example(插入1-10號)

create

procedure test(

)begin

declare i int

default0;

repeat

begin

select i;

set i=i+1;

insert

into users(id)

values

(i);

end;

until i>=

10-- 如果i>=10,則跳出迴圈

endrepeat

;end

;

注意:until後面沒有 「;」

question:將users中的名字改變

-- 基本語法

case..

.when..

.then..

..when..

..then..

..else..

.end

case

;-- 例子

create

procedure testcase(

in usersid int

)begin

case

when usersid=

1then

update users set name=

'bob'

where id=usersid;

when usersid=

2then

update users set name=

'num'

where id=usersid;

else

update users set name=

'sos'

where id=usersid;

endcase

;end

;-- 呼叫

call testcase(1)

;call testcase(2)

;call testcase(3)

;

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...