**可能存在中文的標點符號
儲存過程
含義: 一組預先編譯好的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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...