MySQL中的儲存過程和函式

2021-08-08 02:15:43 字數 3141 閱讀 4146

這幾天學了儲存過程和函式,總結的不是太完整,先記下來。

#儲存過程

/*含義:一組經過預先編譯的sql語句的集合

好處:1、提高了sql語句的重用性,減少了開發程式設計師的壓力

2、提高了效率

3、減少了傳輸次數

分類:1、無返回無參

2、僅僅帶in型別,無返回有參

3、僅僅帶out型別,有返回無參

4、既帶in又帶out,有返回有參

5、帶inout,有返回有參

注意:in、out、inout都可以在乙個儲存過程中帶多個

*/案例

#1.建立儲存過程或函式實現傳入使用者名稱和密碼,插入到admin表中

delimiter $

create procedure test_pro1(in username varchar(20),in psw varchar(20))

begin

insert into admin(username,password) values('123','123');

end $

#2.建立儲存過程或函式實現傳入女神編號,返回女神名稱和女神**

create procedure test_pro2(in beautyid int,out bname varchar(20),out bphone varchar(20))

begin

select name,phone into bname,bphone

from beauty b

where id = beautyid;

end $

#3.建立儲存儲存過程或函式實現歘人兩個女神生日,返回大小

create procedure test_pro7(in bdate1 datetime,in bdate2 datetime,out result int)

begin

case

when datediff(bdate1,bdate2`beauty`)>0 then select 1 into result;

when datediff(bdate1,bdate2)=0 then select 0 into result;

else select -1 into result;

end case;

end$

#呼叫call ('1995-5-5','1996-6-6',@r);

select @r$

#四、建立儲存過程或函式實現傳入乙個日期,格式化成xx年xx月xx日並返回

create procedure test_pro8(in mydate datetime,out formatdate varchar(20))

begin

select date_format(mydate,'%y年%m月%d日') into formatdate;

end$

#五、建立儲存過程或函式實現傳入女神名稱,返回:女神 and 男神 格式的字串

#如 傳入 :小昭

#返回: 小昭 and 張無忌

create procedure test_pro9(in bname varchar(20),out result varchar(20))

begin

select concat(bname,' and ',ifnull(boyname,'無')) into result

from boys b

join beauty be on b.id = be.boyfriend_id

where be.name = bname;

end$

call test_pro9('趙敏',@r)$

select @r$

#六、建立儲存過程或函式,根據傳入的條目數和起始索引,查詢beauty表的記錄

create procedure test_pro12(in size int,in startindex int)

begin

select * from beauty

limit startindex,size;

end$

call test_pro12(5,1);

函式#函式

#一、建立函式

學過的函式:length、substr、concat等

語法:create function 函式名(引數名 引數型別,...) returns 返回型別

begin

函式體end

#二、呼叫函式

select 函式名(實參列表)

案例

#案例1:歘人乙個女生名稱,返回對應男神名,如果沒有該男神,則返回null

create function my_fun1(bname varchar(20)) returns varchar(20)

begin

declare boyname varchar(20);#宣告乙個變數

select boys.`boyname` into boyname

from boys

right join beauty b

on boys.`id`=b.boyfriend_id

where b.name=bname;

return boyname;

end $

#案例2:傳入使用者名稱和密碼,返回admin表中該使用者的記錄數

create function my_fun2(username varchar(20),password varchar(20)) returns int

begin

declare i int default 0;

select count(*) into i

from admin

where admin.username=username and admin.password=password;

return i;

end $

三、函式和儲存過程的區別

函式:關鍵字 function ,呼叫語法 select 函式() ,返回值 只能是乙個 , 應用場景  一般用於查詢結果為乙個值並返回時,當有返回值而且僅僅乙個

儲存過程:關鍵字 procedure  ,呼叫語法  call 儲存過程(), 返回值  可以有0個或多個, 應用場景  一般用於更新

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...