<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
儲存過程(Stored Procedure)也成為儲存程式,是一種在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料庫物件。即預先編輯好SQL語句的集合,這個集合完成了某項具體的功能集合,需要這個功能的時候,只要呼叫這個過程就好。在業務開發工過程中,一般不要求使用儲存過程實現業務流程,編寫的儲存過程不方便偵錯和擴充套件,同時沒有移植性。
簡單來說儲存過程就是具有名字的一段程式碼,用來完成一個特定的功能。他和函數很像,但是他不是函數,
MySQL 5.0 版本開始支援儲存過程。
儲存函數的限制比較多,例如不能用臨時表,只能用表變數,而儲存過程的限制較少,儲存過程的實現功能要複雜些,而函數的實現功能針對性比較強。
返回值不同。儲存函數必須有返回值,且僅返回一個結果值;儲存過程可以沒有返回值,但是能返回結果集(out,inout)。
呼叫時的不同。儲存函數嵌入在SQL中使用,可以在select 儲存函數名(變數值);儲存過程通過call語句呼叫 call 儲存過程名。
引數的不同。儲存函數的引數型別類似於IN引數,沒有類似於OUT和INOUT的引數。儲存過程的引數型別有三種,in、out和inout:
建立的儲存過程儲存在資料庫的資料字典中。
建立語法:
create procedure 儲存過程的名字(參數列)
begin
儲存過程體(SQL語句的集合);
end
注意:
①參數列包含三個部分:
引數模式 引數名 引數型別
(比如: in s_name varchar(20) )
宣告儲存過程:
CREATE PROCEDURE demo_in_parameter(IN s_name varchar(20))
引數模式:
in : 該引數可以作為輸入,需要呼叫方傳入值來給儲存過程
out : 該引數可以作為輸出,該引數可以作為返回值給呼叫方
inout : 該引數既可以做輸入,也可以作為輸出
儲存過程開始和結束符號:
BEGIN .... END
②如果儲存體只要一句SQL語句,begin和end可以省略,儲存體裡的sql語句結尾處必須加分號,避免資料庫誤判為儲存過程的結束標記,所以需要我們自定義命令的結尾符號:
delimiter 結尾標記 比如:
delimiter $
如果沒有下面用表,先建立
drop table ages; drop table students; create table ages(id int,age int); create table students(id int,name varchar(4),ta_id int); insert into ages(id,age) values(1,12); insert into ages(id,age) values(2,22); insert into ages(id,age) values(3,32); insert into ages(id,age) values(4,42); insert into ages(id,age) values(5,52); insert into ages(id,age) values(6,62); insert into students(id,name,ta_id) values(1,'任波濤',2); insert into students(id,name,ta_id) values(2,'田興偉',1); insert into students(id,name,ta_id) values(3,'唐崇俊',3); insert into students(id,name,ta_id) values(4,'夏銘睿',8); insert into students(id,name,ta_id) values(5,'包琪',1); insert into students(id,name,ta_id) values(6,'夏雨',10); insert into students(id,name,ta_id) values(7,'夏銘雨',10); insert into students(id,name,ta_id) values(8,'白芳芳',6);
無引數儲存過程:
delimiter $ #將語句的結束符號從分號;臨時改為兩個$(可以是自定義) create procedure myp1() begin insert into ages(id,`age`) values (11,'12'); insert into ages(id,`age`) values (21,'13'); insert into ages(id,`age`) values (31,'14'); insert into ages(id,`age`) values (41,'15'); end $ delimiter ; #將語句的結束符號恢復為分號
儲存過程的呼叫:
call 儲存過程名(參數列);
呼叫:
call myp1();
案例:通過學生名查詢對應的年齡
delimiter $ create procedure myp2(in s_name varchar(10)) begin select s.name, a.age from students s inner join ages a on s.ta_id = a.id where s.name=s_name; end $
呼叫:call myp2(‘任波濤’) $
案例:根據學生姓名,返回對應的年齡
create procedure myp3(in sname varchar(10),out age int) begin select a.age into age from students s inner join ages a on s.ta_id = a.id where s.name=sname; end $
呼叫:
call myp3(‘任波濤’,@age) $ #把值取出來放到變數裡去
select @age $ #檢視值了
案例:根據學生姓名,返回對應的年齡和學生編號
create procedure myp4(in sname varchar(10),out age int,out sid int) begin select a.age ,s.id into age,sid from students s inner join ages a on s.ta_id = a.id where s.name=sname; end $
呼叫:
call myp4(‘任波濤’,@age,@sid) $
select @age,@sid $
案例:傳入a和b兩個數,然後讓a和b都乘以2後返回
create procedure myp5(inout a int , inout b int) begin set a=a*2; set b=b*2; end $
呼叫:
set @a=10$ set @b=20$ call myp5(@a,@b)$ select @a,@b $ delimiter ;
#檢視儲存過程
show procedure status like 'myp%';
刪除儲存過程:
drop procedure 儲存過程名;
drop procedure myp1; #每次只能刪除一個
檢視儲存過程的資訊:
show create procedure 儲存名;
show create procedure myp1;
到此這篇關於MySQL由淺入深探究儲存過程的文章就介紹到這了,更多相關MySQL儲存過程內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45