Mysql 儲存過程

2021-10-08 08:12:47 字數 4988 閱讀 4623

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

1、提高**的重用性

2、簡化操作

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

一、建立

create procedure 儲存過程名(引數模式 引數名 引數型別)

begin

儲存過程體

end注意:

1.引數模式:in、out、inout,其中in可以省略

2.儲存過程體的每一條sql語句都需要用分號結尾

二、呼叫

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

舉例:呼叫in模式的引數:call sp1(『值』);

呼叫out模式的引數:set @name; call sp1(@name);select @name;

呼叫inout模式的引數:set @name=值; call sp1(@name); select @name;

三、檢視

show create procedure 儲存過程名;

四、刪除

drop procedure 儲存過程名;

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('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');

end $

#呼叫call myp1()$

#2.建立帶in模式引數的儲存過程

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

create procedure myp2(in beautyname varchar(20))

begin

select bo.*

from boys bo

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

where b.name=beautyname;

end $

#呼叫call myp2('柳岩')$

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

create procedure myp4(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;

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

end $

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

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

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

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

begin

select bo.boyname into boyname

from boys bo

right join

beauty b on b.boyfriend_id = bo.id

where b.name=beautyname ;

end $

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

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

begin

select boys.boyname ,boys.usercp into boyname,usercp

from boys 

right join

beauty b on b.boyfriend_id = boys.id

where b.name=beautyname ;

end $

#呼叫call myp7('小昭',@name,@cp)$

select @name,@cp$

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

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

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

begin

set a=a*2;

set b=b*2;

end $

#呼叫set @m=10$

set @n=20$

call myp8(@m,@n)$

select @m,@n$

#三、刪除儲存過程

#語法:drop procedure 儲存過程名

drop procedure p1;

drop procedure p2,p3;#×

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

desc myp2;×

show create procedure  myp2;

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

create procedure test_pro1(in username varchar(20),in loginpwd varchar(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;

end $

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

create procedure test_pro4(in mydate datetime,out strdate varchar(50))

begin

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

end $

call test_pro4(now(),@str)$

select @str $

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

如 傳入 :小昭

返回: 小昭 and 張無忌

drop procedure test_pro5 $

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 = bo.id

where b.name=beautyname;

set str=

end $

call test_pro5('柳岩',@str)$

select @str $

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

drop procedure test_pro6$

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