MySQL教程彻底学懂存储过程


鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

1銆佸瓨鍌ㄨ繃绋嬬殑鐩稿叧姒傚康

浠涔堟槸瀛樺偍杩囩▼锛?br /> 绫讳技浜巎ava涓殑鏂规硶锛宲ython涓殑鍑芥暟銆?/p>

浣跨敤瀛樺偍杩囩▼鐨勫ソ澶勶細
1銆佹彁楂樹唬鐮佺殑閲嶇敤鎬э紱
2銆佺畝鍖栨搷浣滐紱
3銆佸噺灏戜簡缂栬瘧娆℃暟锛屽苟涓斿噺灏戜簡鍜屾暟鎹簱鏈嶅姟鍣ㄧ殑杩炴帴娆℃暟锛屾彁楂樹簡鏁堢巼銆傛敞鎰忥細骞虫椂姣忔墽琛屼竴鍙ql璇彞锛屽氨浼氳繛鎺ysql鏈嶅姟鍣ㄤ竴娆★紱

瀛樺偍杩囩▼鐨勫惈涔夛細
涓缁勯鍏堢紪璇戝ソ鐨凷QL璇彞鐨勯泦鍚堛?/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 缁撴潫鏍囪
渚嬪锛歞elimiter $  -- 琛ㄧず浠?浣滀负缁撳熬绗﹀彿銆?/p>

鈶?瀛樺偍杩囩▼鐨勮皟鐢ㄨ娉?/p>

call 瀛樺偍杩囩▼鍚?瀹炲弬鍒楄〃);

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

4.甯n妯″紡鐨勫瓨鍌ㄨ繃绋?/h2>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

2锛夋渚嬶細鍒涘缓涓涓瓨鍌ㄨ繃绋嬪疄鐜帮紝鐢ㄦ埛鏄惁鐧婚檰鎴愬姛銆?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

鎿嶄綔濡備笅锛?/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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

5.甯ut妯″紡鐨勫瓨鍌ㄨ繃绋?/h2>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

8.瀛樺偍杩囩▼鐨勫垹闄?/h2>
drop procedure 瀛樺偍杩囩▼鍚嶏紱

9.鏌ョ湅鏌愪釜瀛樺偍杩囩▼鐨勪俊鎭?/h2>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

10.瀛樺偍杩囩▼妗堜緥鑰冩牳

1锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥暟瀹炵幇浼犲叆濂崇鍚嶇О锛岃繑鍥烇細濂崇AND鐢风锛屾牸寮忕殑瀛楃涓?br />    濡備紶鍏ワ細灏忔槶
   杩斿洖锛氬皬鏄瑼ND寮犳棤蹇?br /> 2锛夊垱寤哄瓨鍌ㄨ繃绋嬫垨鍑芥暟锛屾牴鎹紶鍏ョ殑鏉$洰鏁板拰璧峰绱㈠紩锛屾煡璇eauty琛ㄧ殑璁板綍銆?/p>

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

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>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

浠ヤ笂灏辨槸MySQL绯诲垪褰诲簳瀛︽噦瀛樺偍杩囩▼鐨勮缁嗗唴瀹癸紝鏇村鍏充簬MySQL瀛樺偍杩囩▼鐨勮祫鏂欒鍏虫敞鑴氭湰涔嬪鍏跺畠鐩稿叧鏂囩珷锛?/p>