MySQL儲存過程和函式

2021-10-06 15:48:25 字數 3536 閱讀 6057

# 儲存過程和函式

/*儲存過程和函式

好處:1.提高**的重用性

2.簡化操作

*/# 儲存過程

/*含義:一組預先編譯好的sql語句的集合,理解成批處理語句

1.提高**的重用性

2.簡化操作

3.減少了編譯次數並且減少了和資料庫伺服器的連線次數,提高了效率

*//*

# 一、建立語法

create procedure 儲存過程名(引數列表)

begin

儲存過程體(一組合法的sql語句)

end注意:

1.引數列表包含三部分

引數模式 引數名 引數型別

舉例:in stuname varchar(20)

引數模式:

in:該引數可以作為輸入,也就是改引數需要呼叫方傳入值

out:該引數可以作為輸出,也就是改引數可以作為返回值

inout:該引數既可以作為輸入又可以作為輸出,也就是該引數既需要傳入值,也可以返回值

2.如果儲存過程體僅僅只有一句話,begin end可以省略

儲存過程體中的每條sql語句的結尾要求必須加分號,

儲存過程的結尾可以使用delimiter重新設定

語法:delimiter 結束標記

# 案例

delimiter $

# 二、呼叫語法

call 儲存過程名(實參列表);

*/# 1.空參列表

# 案例:插入到admin表中五條記錄

select

*from admin;

delimiter $

create

procedure myp1(

)begin

insert

into admin(username,password)

values

('join1'

,'0000'),

('join2'

,'0000'),

('tom'

,'0000'),

('rose'

,'0000'),

('jack'

,'0000');

end $

# 呼叫

call myp1(

)# sqlyog中執行不要加$ ,dos中執行必須要有$

# 2.創意帶in模式引數的儲存過程

# 案例1:建立儲存過程實現 根據女神名,查詢對應的男神資訊

delimiter $

create

procedure myp2(

in beautyname varchar(20

))begin

select bo.

*from boys as bo

right

join beauty as b

on bo.id=b.boyfriend_id

where b.name=beautyname;

end $

# 呼叫

call myp2(

'金星');

# 案例2:創造儲存過程實現使用者是否登入成功

delimiter $

create

procedure myp3(

in username varchar(20

),in password varchar(20

))begin

declare result int

default0;

select

count(*

)into result

from admin

where admin.username =username

and admin.

`password`

=password;

select

if(result>0,

'成功'

,'失敗');

end $

# 呼叫

call myp3(

'張飛'

,'8888');

# 3.建立帶out模式的儲存過程

# 案例1:根據女神名,返回對應的男神名

delimiter $

create

procedure myp4(

in beautyname varchar(20

),out boyname varchar(20

))begin

select bo.boyname into boyname

from boys as bo

inner

join beauty as b

on bo.id=b.boyfriend_id

where b.name=beautyname;

end $

# 呼叫

set@bnmae

='null'

;call myp4(

'金星'

,@bname);

select

@bname

;# 案例2:根據女神名,返回對應的男神魅力值

delimiter $

create

procedure myp5(

in beautyname varchar(20

),out boyname varchar(20

),out usercp int

)begin

select bo.boyname ,bo.usercp into boyname, usercp

from boys as bo

inner

join beauty as b

on bo.id=b.boyfriend_id

where b.name=beautyname;

end $

# 呼叫

call myp5(

'金星'

,@bname

,@bcp);

select

@bname

,@bcp

;# 4.建立帶inout模式引數的儲存過程

# 案例1:傳入a和b兩個值,最終a和b都翻倍並返回

delimiter $

create

procedure myp6(

inout a int

,inout b int

)begin

set a=a*2;

set b=b*2;

end $

# 呼叫

set@m=10

;set@n=

20;call myp6(@m,

@n);select@m,

@n;# 二、刪除儲存過程

/*語法:

drop procedure 儲存過程名;

注意:一次只能刪除乙個

*/drop

procedure myp1;

# 三、檢視儲存過程的資訊

show

create

procedure myp2;

mysql 過程和函式 MySQL 儲存過程和函式

變數 系統變數 變數由系統提供,不是使用者自定義的,屬於伺服器層面 全域性變數 會話變數 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話 檢視全域性變數 show global variables show global variablesli...

MySQL儲存過程和儲存函式

儲存過程和儲存函式 mysql的儲存過程 stored procedure 和函式 stored function 統稱為stored routines。1.儲存過程和函式的區別 函式只能通過return語句返回單個值或者表物件。而儲存過程不允許執行return,但是通過out引數返回多個值。函式是...

Mysql 儲存過程和函式

一 儲存過程 procedure 本質上沒區別,執行的本質都一樣。只是函式有如 只能返回乙個變數的限制。而儲存過程可以返回多個。函式是可以嵌入在sql中使用的,可以在select中呼叫,而儲存過程要讓sql的query 可以執行,需要把 mysql real connect 的最後乙個引數設定為cl...