Mysql 儲存過程

2022-08-10 06:00:12 字數 4604 閱讀 3820

**可能存在中文的標點符號

儲存過程

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

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

2、簡化操作

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

一、建立語法:

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

begin

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

儲存過程體中的每一句sql都需要加上分號

end注意:

1、引數列表包含三部分

引數模式   引數名  引數型別

舉例:in setuname  varchar(20)

引數模式:

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

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

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

2、如果儲存過程中只有一條語句 begin end可以省略

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

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

語法:delimiter 結束標記

案例:delimiter $

二、呼叫語法:

call 儲存過程名(引數列表);

1、空參列表

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

delimiter $

create  procedure myp1()

begin

insert into admin(username,'password')

value ('join','000'),('join','111'),('join','222'),('join','333'),('join','444');

end $

呼叫call myp1() $

2、建立in模式的儲存過程

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

create procedure myp2(in beauty varchar(20) )

begin 

select bo.*

from boys bo

right join beauty b on bo.id = b.boyfriend_id

where b.name = beautyname;

end $

呼叫call my2p('小明')$ 

案例2:建立儲存過程實現,使用者是否登入成功

create procedure myp3(in username varchar(20), in password varchar(20))

begin 

declare   result   int   default  0;  #宣告變數並初始化

select   count(*)   into   result    #賦值

from admin  

where admin.username = username

and admin.password = password;

selecti if( result  > 0 , '成功', '失敗' );  #使用

end $

呼叫call myp3('張飛『,'8888')$

建立帶out模式的儲存過程

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

create procedure myp4(in beautyname varchar(20),  out boyname varchar(20))

begin 

select bo.boyname into boyname  # 賦值 

from   boys   bo

inner join beauty b  on  bo.id = b.biyfriend_id

where b.name = beautyname;

end $

呼叫#set @bname$ 先定義

call myp4('小趙' , @bname)$     #@bname  可以先定義在使用 也可以直接使用

select @bname$

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

create procedure my5( in beautyname varchar(20) ,out  boyname         varchar(20),  out usercp int )

begin 

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

from   boys   bo

inner join beauty b  on  bo.id = b.biyfriend_id

where b.name = beautyname;

end $

呼叫call my5('小趙' , @bname , @usercp)$

select @bname , @usercp$

建立帶inout模式的引數的儲存過程

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

create procedure myp6(inout a int , inout b  int)

begin

set a=a*2;

set b= b*2;

end$

呼叫set @n=10$

set @m=20$

call myp6(@n,   @m)$

select @n  ,@m$

案例練習:

一、建立儲存過程實現傳入使用者和密碼,插入到admin表中

create procedure test_pro1(in username varchar9(20) ,  in  loginpwd varchar9(20) )

begin

insert into admin(admin.username, password )

values(username,  loginpwd) ;

end  $

二、建立儲存過程實現傳入女神編號,返回女神名稱的女神**

create procedure test_pro2(in  id int,  out name varchar(20),  out  phone      varchar(20))

begin

select b.name,  b.phone  into  name,  phone

from beauty b

where b.id = id;

end $

三、建立儲存過程或函式實現傳入兩個女神生日  返回大小

create procedure test_pro3 (in birth1 datetime ,  in  birth2 datetime ,  out result     int)

begin 

select datediff(birth1,  birth2)  into result; # datediff  返回 大於0 等於0 小於0

end $

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

createprocedure test_4(in   mydate datetime,  out strdate varchar(50))

begin 

select date _format (mydate,  '%y年%m月%d日')  into  strdate;

end  $ 

call test_4 (now(),  @str) $

select @str $

刪除儲存過程

語法 drop procedure  儲存過程名

drop procedure p1;  #一次只能刪除乙個儲存過程

檢視儲存過程

show create procedure 儲存過程名

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

如 傳入 : 小趙 

返回 : 小趙 and 張無忌

create procedure test_pro5(in beautyname  varchar(20)  , out str varchar(50))

begin

select concat(beautyname ,  'and ',  ifnull(boyname,  'null')) into str

from boys bo

right join beauty  b  on  b.boyfriend_id = b.id

where b.name = beautyname;

end $

call test_pro5('小馬' ,@str)$

select @str   $

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

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

begin 

select * from beauty limit startindex,  size;

end $

call test_pro6(3,5)$

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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...