您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL教程之如何掌握存儲過程”,在日常操作中,相信很多人在MySQL教程之如何掌握存儲過程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL教程之如何掌握存儲過程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、存儲過程的相關概念
2、存儲過程的用法
1)存儲過程的創建語法
2)對創建語法的理解
3.空參的存儲過程
4.帶in模式的存儲過程
5.帶out模式的存儲過程
6.帶inout模式的存儲過程
7.存儲過程的案例解析
8.存儲過程的刪除
9.查看某個存儲過程的信息
10.存儲過程案例考核
什么是存儲過程:
類似于java中的方法,python中的函數。
使用存儲過程的好處:
1、提高代碼的重用性;
2、簡化操作;
3、減少了編譯次數,并且減少了和數據庫服務器的連接次數,提高了效率。注意:平時每執行一句sql語句,就會連接mysql服務器一次;
存儲過程的含義:
一組預先編譯好的SQL語句的集合。
create procedure 存儲過程名(參數列表) begin 存儲過程體(一組合法有效的sql語句) end
① 參數列表:參數列表包含3部分
參數模式 參數名 參數類型 例如:in stuname varchar(20)
② 參數模式分類
in:該參數可以作為輸入,也就是該參數,需要調用方傳入值。
out:該參數可以作為輸出,也就是該參數,可以作為返回值。
inout:該參數既可以作為輸入又可以作為輸出,也就是該參數既需要傳入值,又可以返回值。
③ 如果存儲過程體僅僅只有一句話,begin/end可以省略。
Ⅰ 存儲過程體中的每條sql語句的結尾,要求必須加分號。
Ⅱ 存儲過程的結尾,可以使用delimiter重新設置,否則都用";"會造成混淆。
語法:delimiter 結束標記
例如:delimiter $ -- 表示以$作為結尾符號。
④ 存儲過程的調用語法
call 存儲過程名(實參列表);
"存儲過程的整個執行過程,最好在CMD窗口中執行" -- 創建一個存儲過程 delimiter $ create procedure myp() begin insert into admin(username,`password`) values ("tom","1111"),("jerry","2222"), ("jalen","3333"),("rose","4444"),("tonny","5555"); end $ -- 調用存儲過程 call myp()$ -- 查看結果。 select * from admin$
結果如下:
1)案例:創建存儲過程實現,根據部門編號,查詢對應的部門名稱。
-- 創建一個存儲過程 delimiter $ create procedure myp2(in num int) begin select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno where e.deptno=num; end $ -- 調用存儲過程 call myp2(10)$
結果如下:
2)案例:創建一個存儲過程實現,用戶是否登陸成功。
操作如下:
-- 創建一個存儲過程 delimiter $ create procedure myp3(in username varchar(10),password varchar(10)) begin declare result int; select count(*) into result from admin ad where ad.username=username and ad.password=password; select if(count(*) > 0,"登陸成功","登陸失敗") 登陸狀態; end $ -- 調用存儲過程 call myp3('john','8888');
結果如下:
1)案例1:創建一個存儲過程,根據女神姓名,返回對應的男神姓名
-- 創建一個存儲過程 delimiter $ create procedure myp4(in beautyName varchar(20),out boyName varchar(20)) begin select b.boyName into boyName from beauty left join boys b on beauty.boyfriend_id=b.id where beauty.name=beautyName; end $ -- 調用 # 重新定義一個變量@boyname接收返回值boyName。 call myp4("趙敏",@boyname)$ select @boyname$ call myp4("柳巖",@boyname)$ select @boyname$
結果如下:
2)案例2:創建一個存儲過程,根據女神名,返回對應的男神名和男神魅力值
-- 創建一個存儲過程 delimiter $ create procedure myp5(in beautyName varchar(20),out boyName varchar(20),out userCP int) begin select b.boyName,b.userCP into boyName,userCP from beauty left join boys b on beauty.boyfriend_id=b.id where beauty.name=beautyName; end $ -- 調用 # 重新定義一個變量@boyname接收返回值boyName。 call myp5("趙敏",@boyname,@usercp)$ select @boyname,@usercp$ call myp5("柳巖",@boyname,@usercp)$ select @boyname,@usercp$
結果如下:
1)案例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$
結果如下:
1)創建存儲過程或函效,實現傳入用戶名和密碼,插入到admin表中。
2)創建儲過程或函數,實現傳入女神編號,返回女神名稱和女神電話。
3)創建存儲存儲過程或函數,實現傳入兩個女神生日,返回大小。
1)創建存儲過程或函效,實現傳入用戶名和密碼,插入到admin表中。
-- 創建一個存儲過程 delimiter $ create procedure pro1(in username varchar(20),in userpwd varchar(20)) begin insert into admin(username,`password`) values (username,userpwd); end $ -- 調用存儲過程 call pro1("魯智深","123abc")$ select * from admin$
結果如下:
2)創建儲過程或函數,實現傳入女神編號,返回女神名稱和女神電話。
-- 創建一個存儲過程 delimiter $ create procedure pro2(in id int,out beautyName varchar(20),out beautyPhone varchar(20)) begin select beauty.name,beauty.phone into beautyName,beautyPhone from beauty where beauty.id=id; end $ -- 調用存儲過程 call pro2(2,@beautyname,@beautyphone)$ select @beautyname,@beautyphone$ call pro2(3,@beautyname,@beautyphone)$ select @beautyname,@beautyphone$
結果如下:
3)創建存儲存儲過程或函數,實現傳入兩個女神生日,返回大小。
-- 創建一個存儲過程 delimiter $ create procedure pro3(in borndate1 datetime,in borndate2 datetime,out result int) begin select datediff(borndate1,borndate2) into result; end $ -- 調用存儲過程 call pro3("1993-8-12",now(),@result)$ select @result$
結果如下:
drop procedure 存儲過程名;
1)創建存儲過程或函數實現傳入女神名稱,返回:女神AND男神,格式的字符串
如傳入:小昭
返回:小昭AND張無忌
2)創建存儲過程或函數,根據傳入的條目數和起始索引,查詢beauty表的記錄。
1)創建存儲過程或函數,實現傳入女神名稱,返回:女神AND男神,格式的字符串。
delimiter $ create procedure test1(in beautyname varchar(20)) begin select concat(beauty.name,"AND",boys.boyName) from beauty left join boys on beauty.boyfriend_id=boys.id where beauty.name=beautyname; end $ call test1("柳巖")$ call test1("趙敏")$
結果如下:
2)創建存儲過程或函數,根據傳入的條目數和起始索引,查詢beauty表的記錄。
delimiter $ create procedure test2(in startIndex int,in length int) begin select * from beauty limit startIndex,length; end $ -- 每頁顯示3條記錄 -- 顯示第2頁 call test2(3,3)$ -- 顯示第3頁 call test2(6,3)$
結果如下:
到此,關于“MySQL教程之如何掌握存儲過程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。