Mysql存儲過程

含義:一組預(yù)先編譯好的SQL語句的集合烤镐,理解成批處理語句

好處

??1婉商、如果每次都要執(zhí)行3個(gè)語句苞也,那使用存儲過程包裝就可以一次性完成了级野,提高代碼重用性

??2、如果編譯過了這個(gè)存儲過程檩互,第二次調(diào)用就不用編譯了

??3特幔、減少了和數(shù)據(jù)庫服務(wù)器的連接次數(shù),提高了效率

一闸昨、創(chuàng)建語法

create procedure 存儲過程名(參數(shù)列表)
begin
存儲過程體(一組合法的SQL語句)
end

注意:

1蚯斯、參數(shù)列表包含三部分:參數(shù)模式 參數(shù)名 參數(shù)類型

舉例:

IN stuname varchar(20)

參數(shù)模式:

  • IN 進(jìn)口,該參數(shù)可以作為輸入饵较,需要調(diào)用方傳入值

  • OUT 出口拍嵌,該參數(shù)可以作為輸出,也就是這個(gè)參數(shù)可以作為返回值循诉,不像函數(shù)一樣有return

  • INOUT 進(jìn)出口横辆,該參數(shù)即可以作為輸入又可以作為輸出,即要傳入值茄猫,又可以返回值

2狈蚤、如果存儲過程體僅僅只有一句話,BEGIN END 可以省略(和函數(shù)一樣划纽,只有一條可以圣洛大括號)

??存儲過程體中每條SQL語句的結(jié)尾要求必須加分號脆侮,存儲過程的結(jié)尾可以使用 DELIMITER 重新設(shè)置

語法:

DELIMITER 結(jié)束標(biāo)記

DELIMITER $

二、調(diào)用語法

# 使用位置參數(shù)
CALL 存儲過程名(實(shí)參列表) 結(jié)束符號

三勇劣、具體使用

1靖避、空參列表

#案例:插入到 admin 表中5條記錄

create table admin( id int, username varchar(30), `password` varchar(30) );

# 注意這個(gè)$ 定義為了結(jié)束符,調(diào)用的時(shí)候也需要寫上

DELIMITER $ create procedure myp1() 
BEGIN 
  insert into admin(username,`password`) 
  values('join1','000'),('join2','000'),('join3','000'),('join4','000'),('join5','000'); 
END $

上面到sql窗口運(yùn)行后就可以生成存儲過程了比默,并且可以在 workbench 中查到幻捏。


1.png

執(zhí)行調(diào)用后在 admin 表就有5條數(shù)據(jù)了

call myp1()$
2.png

注意這個(gè)結(jié)束符號也變成 $ 了,再用分號會查不出來語句退敦。

3.png

2粘咖、創(chuàng)建一個(gè)帶 in 模式參數(shù)的存儲過程

要求1:根據(jù)學(xué)生信息,查找學(xué)生的全部信息以及成績侈百、

create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '趙雷' , '1990-01-01' , '男');
insert into Student values('02' , '錢電' , '1990-12-21' , '男');
insert into Student values('03' , '孫風(fēng)' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吳蘭' , '1992-03-01' , '女');
insert into Student values('07' , '鄭竹' , '1989-07-01' , '女');
insert into Student values('09' , '張三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2017-12-30' , '女');
insert into Student values('12' , '趙六' , '2017-01-01' , '女');
insert into Student values('13' , '孫七' , '2018-01-01' , '女');

create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
create procedure myp2(in stuName varchar(20))
begin
  select
    s.*,
    c.*
  from student s
  inner join sc c
  on s.sid=c.sid
  where s.name=stuname;
end $

# 調(diào)用

call myp2('趙雷')$
4.png

要求2:傳入多個(gè)參數(shù)

create procedure myp3(in sex varchar(20),in sage varchar(20))
begin
  declare result varchar(20) default '';# 聲明變量并初始化
  select
    count(1) into result # 賦值給變量
  from student s
  where s.ssex=sex
  and s.sage>sage;
  select result; #使用變量
end $
# 調(diào)用存儲過程
call myp3('男','1989-01-01')$
5.png

3瓮下、創(chuàng)建一個(gè)帶 out 模式參數(shù)的存儲過程

要求:根據(jù)性別,返回對應(yīng)學(xué)生名字

DELIMITER $

drop procedure myp5$
create procedure myp5(in name varchar(20),out sex varchar(20))
begin
  select
    s.ssex into sex
  from student s
  where s.sname=name;
end $

# 定義用戶變量钝域,并且在調(diào)用函數(shù)的參數(shù)里面接收

call myp5('趙雷',@bsex)$
select @bsex$
6.png
drop procedure myp6$
create procedure myp6(in sex varchar(20),out sname varchar(20))
begin
  select
    s.sname into sname
  from student s
  where s.ssex=sex;
end $

# 如果有多個(gè)值會報(bào)錯(cuò)

call myp6('男',@sname)$
select @sname$
7.png

要求:使用多個(gè) out 值讽坏,要求根據(jù)姓名返回性別和年齡

# 注意賦值的寫法,不能是 s.ssex into sex , s.sage into age

create procedure myp7(in name varchar(20),out sex varchar(20),out age varchar(20))
begin
  select
    s.ssex ,s.sage into sex,age
  from student s
  where s.sname=name;
end $

# 定義用戶變量例证,并且在調(diào)用函數(shù)的參數(shù)里面接收

call myp7('趙雷',@bsex,@age)$
select @bsex,@age$
8.png

4路呜、創(chuàng)建一個(gè)帶 inout 模式參數(shù)的存儲過程

要求:傳入 a、b 兩個(gè)值织咧,最終 a 和 b 都翻倍并返回

# a胀葱、b 是局部變量,不用加 @

create procedure myp8(inout a int,inout b int)
begin
  set a=a*2;
  set b=b*b;
end $

# 調(diào)用并傳入笙蒙,不能直接傳抵屿,需要定義變量并傳入,這樣變量的內(nèi)容傳入后再接收返回的值

set @m=10$
set @n=20$
call myp8(@m,@n)$
select @m,@n$
9.png

四捅位、存儲過程的刪除

# 注意一次只能刪除一個(gè)

drop procedure myp1;

五轧葛、存儲過程的查看

# 查看存儲過程的信息

show create procedure myp2;

注意存儲過程不能修改里面的邏輯,要修改也只能是一些參數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艇搀,一起剝皮案震驚了整個(gè)濱河市尿扯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰雕,老刑警劉巖衷笋,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矩屁,居然都是意外死亡辟宗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門档插,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慢蜓,“玉大人,你說我怎么就攤上這事郭膛〕柯眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵则剃,是天一觀的道長耘柱。 經(jīng)常有香客問我,道長棍现,這世上最難降的妖魔是什么调煎? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮己肮,結(jié)果婚禮上士袄,老公的妹妹穿的比我還像新娘悲关。我一直安慰自己,他們只是感情好娄柳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布寓辱。 她就那樣靜靜地躺著,像睡著了一般赤拒。 火紅的嫁衣襯著肌膚如雪秫筏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天挎挖,我揣著相機(jī)與錄音这敬,去河邊找鬼。 笑死蕉朵,一個(gè)胖子當(dāng)著我的面吹牛崔涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墓造,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼堪伍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了觅闽?” 一聲冷哼從身側(cè)響起帝雇,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛉拙,沒想到半個(gè)月后尸闸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孕锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年吮廉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸肆。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宦芦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轴脐,到底是詐尸還是另有隱情调卑,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布大咱,位于F島的核電站恬涧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碴巾。R本人自食惡果不足惜溯捆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦瓢。 院中可真熱鬧提揍,春花似錦啤月、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺抗。三九已至售碳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绞呈,已是汗流浹背贸人。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佃声,地道東北人艺智。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像圾亏,于是被迫代替她去往敵國和親十拣。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原文:http://www.runoob.com/w3cnote/mysql-stored-procedure.h...
    忘了呼吸的那只貓閱讀 1,103評論 0 1
  • SQL語句需要先編譯然后執(zhí)行志鹃,而存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集夭问,...
    MIN_ZJM閱讀 649評論 0 1
  • 轉(zhuǎn)載自這里 存儲過程簡介 我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行曹铃,而存儲過程(Sto...
    杜七閱讀 2,403評論 4 27
  • 轉(zhuǎn)載自-> 記錄MYSQL存儲過程中的關(guān)鍵語法:DELIMITER //聲明語句結(jié)束符缰趋,用于區(qū)分;CREATE P...
    風(fēng)亡小窩閱讀 69,815評論 5 78
  • 1.存儲過程是存儲在數(shù)據(jù)庫目錄中的一段聲明性SQL語句。觸發(fā)器陕见,其他存儲過程以及Java秘血,Python,PHP等應(yīng)...
    Aimerwhy閱讀 359評論 0 0