MySQL教程彻底学懂存储过程 |
1銆佸瓨鍌ㄨ繃绋嬬殑鐩稿叧姒傚康浠涔堟槸瀛樺偍杩囩▼锛?br /> 绫讳技浜巎ava涓殑鏂规硶锛宲ython涓殑鍑芥暟銆?/p> 浣跨敤瀛樺偍杩囩▼鐨勫ソ澶勶細 瀛樺偍杩囩▼鐨勫惈涔夛細 2銆佸瓨鍌ㄨ繃绋嬬殑鐢ㄦ硶1锛夊瓨鍌ㄨ繃绋嬬殑鍒涘缓璇硶
create procedure 瀛樺偍杩囩▼鍚?鍙傛暟鍒楄〃)
begin
瀛樺偍杩囩▼浣?涓缁勫悎娉曟湁鏁堢殑sql璇彞)
end
2锛夊鍒涘缓璇硶鐨勭悊瑙?/h3>鈶?鍙傛暟鍒楄〃锛氬弬鏁板垪琛ㄥ寘鍚?閮ㄥ垎 鍙傛暟妯″紡 鍙傛暟鍚? 鍙傛暟绫诲瀷 渚嬪锛歩n stuname varchar(20) 鈶?鍙傛暟妯″紡鍒嗙被 in锛氳鍙傛暟鍙互浣滀负杈撳叆锛屼篃灏辨槸璇ュ弬鏁帮紝闇瑕佽皟鐢ㄦ柟浼犲叆鍊笺?/p> out锛氳鍙傛暟鍙互浣滀负杈撳嚭锛屼篃灏辨槸璇ュ弬鏁帮紝鍙互浣滀负杩斿洖鍊笺?/p> inout锛氳鍙傛暟鏃㈠彲浠ヤ綔涓鸿緭鍏ュ張鍙互浣滀负杈撳嚭锛屼篃灏辨槸璇ュ弬鏁版棦闇瑕佷紶鍏ュ硷紝鍙堝彲浠ヨ繑鍥炲笺?/p> 鈶?濡傛灉瀛樺偍杩囩▼浣撲粎浠呭彧鏈変竴鍙ヨ瘽锛宐egin/end鍙互鐪佺暐銆?/p> 鈪?瀛樺偍杩囩▼浣撲腑鐨勬瘡鏉ql璇彞鐨勭粨灏撅紝瑕佹眰蹇呴』鍔犲垎鍙枫?br />
鈪?瀛樺偍杩囩▼鐨勭粨灏撅紝鍙互浣跨敤delimiter閲嶆柊璁剧疆锛屽惁鍒欓兘鐢?;"浼氶犳垚娣锋穯銆?br />
璇硶锛歞elimiter 缁撴潫鏍囪 鈶?瀛樺偍杩囩▼鐨勮皟鐢ㄨ娉?/p>
3.绌哄弬鐨勫瓨鍌ㄨ繃绋?/h2>
"瀛樺偍杩囩▼鐨勬暣涓墽琛岃繃绋嬶紝鏈濂藉湪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$
缁撴灉濡備笅锛?/p> 4.甯n妯″紡鐨勫瓨鍌ㄨ繃绋?/h2>1锛夋渚嬶細鍒涘缓瀛樺偍杩囩▼瀹炵幇锛屾牴鎹儴闂ㄧ紪鍙凤紝鏌ヨ瀵瑰簲鐨勯儴闂ㄥ悕绉般?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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)$
缁撴灉濡備笅锛?/p> 2锛夋渚嬶細鍒涘缓涓涓瓨鍌ㄨ繃绋嬪疄鐜帮紝鐢ㄦ埛鏄惁鐧婚檰鎴愬姛銆?/p> 鎿嶄綔濡備笅锛?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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');
缁撴灉濡備笅锛?/p> 5.甯ut妯″紡鐨勫瓨鍌ㄨ繃绋?/h2>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鎺ユ敹杩斿洖鍊糱oyName銆?
call myp4("璧垫晱",@boyname)$
select @boyname$
call myp4("鏌冲博",@boyname)$
select @boyname$
缁撴灉濡備笅锛?/p> 2锛夋渚?锛氬垱寤轰竴涓瓨鍌ㄨ繃绋嬶紝鏍规嵁濂崇鍚嶏紝杩斿洖瀵瑰簲鐨勭敺绁炲悕鍜岀敺绁為瓍鍔涘?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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鎺ユ敹杩斿洖鍊糱oyName銆?
call myp5("璧垫晱",@boyname,@usercp)$
select @boyname,@usercp$
call myp5("鏌冲博",@boyname,@usercp)$
select @boyname,@usercp$
缁撴灉濡備笅锛?/p> 6.甯nout妯″紡鐨勫瓨鍌ㄨ繃绋?/h2>1锛夋渚?锛氫紶鍏鍜宐涓や釜鍊硷紝鏈缁坅鍜宐閮界炕鍊嶅苟杩斿洖銆?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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$
缁撴灉濡備笅锛?/p> 7.瀛樺偍杩囩▼鐨勬渚嬭В鏋?/h2>1锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥晥锛屽疄鐜颁紶鍏ョ敤鎴峰悕鍜屽瘑鐮侊紝鎻掑叆鍒癮dmin琛ㄤ腑銆?/p> 2锛夊垱寤哄偍杩囩▼鎴栧嚱鏁帮紝瀹炵幇浼犲叆濂崇缂栧彿锛岃繑鍥炲コ绁炲悕绉板拰濂崇鐢佃瘽銆?/p> 3锛夊垱寤哄瓨鍌ㄥ瓨鍌ㄨ繃绋嬫垨鍑芥暟锛屽疄鐜颁紶鍏ヤ袱涓コ绁炵敓鏃ワ紝杩斿洖澶у皬銆?/p> 1锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥晥锛屽疄鐜颁紶鍏ョ敤鎴峰悕鍜屽瘑鐮侊紝鎻掑叆鍒癮dmin琛ㄤ腑銆?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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$
缁撴灉濡備笅锛?/p> 2锛夊垱寤哄偍杩囩▼鎴栧嚱鏁帮紝瀹炵幇浼犲叆濂崇缂栧彿锛岃繑鍥炲コ绁炲悕绉板拰濂崇鐢佃瘽銆?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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$
缁撴灉濡備笅锛?/p> 3锛夊垱寤哄瓨鍌ㄥ瓨鍌ㄨ繃绋嬫垨鍑芥暟锛屽疄鐜颁紶鍏ヤ袱涓コ绁炵敓鏃ワ紝杩斿洖澶у皬銆?/p>
-- 鍒涘缓涓涓瓨鍌ㄨ繃绋?
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$
缁撴灉濡備笅锛?/p> 8.瀛樺偍杩囩▼鐨勫垹闄?/h2>
drop procedure 瀛樺偍杩囩▼鍚嶏紱 9.鏌ョ湅鏌愪釜瀛樺偍杩囩▼鐨勪俊鎭?/h2>10.瀛樺偍杩囩▼妗堜緥鑰冩牳1锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥暟瀹炵幇浼犲叆濂崇鍚嶇О锛岃繑鍥烇細濂崇AND鐢风锛屾牸寮忕殑瀛楃涓?br />
濡備紶鍏ワ細灏忔槶 1锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥暟锛屽疄鐜颁紶鍏ュコ绁炲悕绉帮紝杩斿洖锛氬コ绁濧ND鐢风锛屾牸寮忕殑瀛楃涓层?/p>
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("璧垫晱")$
缁撴灉濡備笅锛?/p> 2锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥暟锛屾牴鎹紶鍏ョ殑鏉$洰鏁板拰璧峰绱㈠紩锛屾煡璇eauty琛ㄧ殑璁板綍銆?/p>
delimiter $
create procedure test2(in startIndex int,in length int)
begin
select *
from beauty
limit startIndex,length;
end $
-- 姣忛〉鏄剧ず3鏉¤褰?
-- 鏄剧ず绗?椤?
call test2(3,3)$
-- 鏄剧ず绗?椤?
call test2(6,3)$
缁撴灉濡備笅锛?/p> 浠ヤ笂灏辨槸MySQL绯诲垪褰诲簳瀛︽噦瀛樺偍杩囩▼鐨勮缁嗗唴瀹癸紝鏇村鍏充簬MySQL瀛樺偍杩囩▼鐨勮祫鏂欒鍏虫敞鑴氭湰涔嬪鍏跺畠鐩稿叧鏂囩珷锛?/p> |