亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL由淺入深探究存儲過程

 更新時間:2022年07月25日 14:53:22   作者:共黃昏  
存儲過程就是一條或者多條SQL語句的集合,可以視為批文件,它可以定義批量插入的語句,也可以定義一個接收不同條件的SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL中存儲過程的相關(guān)資料,需要的朋友可以參考下

什么是存儲過程

存儲過程(Stored Procedure)也成為存儲程序,是一種在數(shù)據(jù)庫中存儲復(fù)雜程序,以便外部程序調(diào)用的一種數(shù)據(jù)庫對象。即預(yù)先編輯好SQL語句的集合,這個集合完成了某項具體的功能集合,需要這個功能的時候,只要調(diào)用這個過程就好。在業(yè)務(wù)開發(fā)工過程中,一般不要求使用存儲過程實現(xiàn)業(yè)務(wù)流程,編寫的存儲過程不方便調(diào)試和擴(kuò)展,同時沒有移植性。

簡單來說存儲過程就是具有名字的一段代碼,用來完成一個特定的功能。他和函數(shù)很像,但是他不是函數(shù),

MySQL 5.0 版本開始支持存儲過程。

存儲過程和存儲函數(shù)的區(qū)別

存儲函數(shù)的限制比較多,例如不能用臨時表,只能用表變量,而存儲過程的限制較少,存儲過程的實現(xiàn)功能要復(fù)雜些,而函數(shù)的實現(xiàn)功能針對性比較強(qiáng)。

返回值不同。存儲函數(shù)必須有返回值,且僅返回一個結(jié)果值;存儲過程可以沒有返回值,但是能返回結(jié)果集(out,inout)。

調(diào)用時的不同。存儲函數(shù)嵌入在SQL中使用,可以在select 存儲函數(shù)名(變量值);存儲過程通過call語句調(diào)用 call 存儲過程名。

參數(shù)的不同。存儲函數(shù)的參數(shù)類型類似于IN參數(shù),沒有類似于OUT和INOUT的參數(shù)。存儲過程的參數(shù)類型有三種,in、out和inout:

  • in:數(shù)據(jù)只是從外部傳入內(nèi)部使用(值傳遞),可以是數(shù)值也可以是變量
  • out:只允許過程內(nèi)部使用(不用外部數(shù)據(jù)),給外部使用的(引用傳遞:外部的數(shù)據(jù)會被先清空才會進(jìn)入到內(nèi)部),只能是變量
  • inout:外部可以在內(nèi)部使用,內(nèi)部修改的也可以給外部使用,典型的引用 傳遞,只能傳遞變量。

優(yōu)點(diǎn)

  • 存儲過程可封裝,并隱藏復(fù)雜的商業(yè)邏輯。
  • 存儲過程可以回傳值,并可以接受參數(shù)。
  • 存儲過程無法使用 SELECT 指令來運(yùn)行,因為它是子程序,與查看表,數(shù)據(jù)表或用戶定義函數(shù)不同。
  • 存儲過程可以用在數(shù)據(jù)檢驗,強(qiáng)制實行商業(yè)邏輯等。

缺點(diǎn)

  • 存儲過程,往往定制化于特定的數(shù)據(jù)庫上,因為支持的編程語言不同。當(dāng)切換到其他廠商的數(shù)據(jù)庫系統(tǒng)時,需要重寫原有的存儲過程。
  • 存儲過程的性能調(diào)校與撰寫,受限于各種數(shù)據(jù)庫系統(tǒng)。

存儲過程的創(chuàng)建和調(diào)用

創(chuàng)建的存儲過程保存在數(shù)據(jù)庫的數(shù)據(jù)字典中。

創(chuàng)建語法:

create procedure 存儲過程的名字(參數(shù)列表)
begin
存儲過程體(SQL語句的集合);
end

注意:

①參數(shù)列表包含三個部分:

參數(shù)模式    參數(shù)名    參數(shù)類型    

(比如: in s_name varchar(20) )

聲明存儲過程:

CREATE PROCEDURE demo_in_parameter(IN s_name varchar(20))      

參數(shù)模式:

in : 該參數(shù)可以作為輸入,需要調(diào)用方傳入值來給存儲過程

out : 該參數(shù)可以作為輸出,該參數(shù)可以作為返回值給調(diào)用方

inout : 該參數(shù)既可以做輸入,也可以作為輸出

存儲過程開始和結(jié)束符號:

BEGIN .... END    

②如果存儲體只要一句SQL語句,begin和end可以省略,存儲體里的sql語句結(jié)尾處必須加分號,避免數(shù)據(jù)庫誤判為存儲過程的結(jié)束標(biāo)記,所以需要我們自定義命令的結(jié)尾符號:

delimiter 結(jié)尾標(biāo)記 比如:

delimiter $

如果沒有下面用表,先創(chuàng)建

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);

無參數(shù)存儲過程:

delimiter $		#將語句的結(jié)束符號從分號;臨時改為兩個$(可以是自定義)
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 ;		#將語句的結(jié)束符號恢復(fù)為分號

存儲過程的調(diào)用:

call 存儲過程名(參數(shù)列表);

調(diào)用:

call myp1();

帶in參數(shù)模式的存儲過程

案例:通過學(xué)生名查詢對應(yīng)的年齡

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 $

調(diào)用:call myp2(‘任波濤’) $

out參數(shù)模式的存儲過程

案例:根據(jù)學(xué)生姓名,返回對應(yīng)的年齡

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 $

調(diào)用:

call myp3(‘任波濤’,@age) $ #把值取出來放到變量里去

select @age $ #查看值了

案例:根據(jù)學(xué)生姓名,返回對應(yīng)的年齡和學(xué)生編號

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 $

調(diào)用:

call myp4(‘任波濤’,@age,@sid) $

select @age,@sid $

inout參數(shù)模式存儲過程和刪除查看存儲過程

案例:傳入a和b兩個數(shù),然后讓a和b都乘以2后返回

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

調(diào)用:

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;

到此這篇關(guān)于MySQL由淺入深探究存儲過程的文章就介紹到這了,更多相關(guān)MySQL存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL細(xì)數(shù)發(fā)生索引失效的情況

    MySQL細(xì)數(shù)發(fā)生索引失效的情況

    本文主要介紹了MySQL導(dǎo)致索引失效的幾種情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • windows 下忘記mysql root密碼的更改方法

    windows 下忘記mysql root密碼的更改方法

    mysql數(shù)據(jù)庫忘記了root密碼是件很痛苦的事,本文介紹如何解決windows環(huán)境下mysql服務(wù)器忘記root密碼的解決方法,需要的朋友可以參考下
    2016-10-10
  • mysql啟動錯誤之mysql啟動報1067錯誤解決方法

    mysql啟動錯誤之mysql啟動報1067錯誤解決方法

    MYSQL啟動報1067錯誤,系統(tǒng)日志中是“服務(wù) mysql 意外停止” Mysql日志中則是:Plugin 'FEDERATED' is disabled,下面給出解決方法
    2014-02-02
  • mysql 5.7.30安裝配置方法圖文教程

    mysql 5.7.30安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.30安裝配置方法圖文教程,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MySQL登錄、訪問及退出操作實戰(zhàn)指南

    MySQL登錄、訪問及退出操作實戰(zhàn)指南

    當(dāng)我們要使用mysql時,一定要了解mysql的登錄、訪問及退出,下面這篇文章主要給大家介紹了關(guān)于MySQL登錄、訪問及退出操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • MySQL中的常用工具實例匯總(推薦)

    MySQL中的常用工具實例匯總(推薦)

    MySQL數(shù)據(jù)庫以體積小、速度快、總體擁有成本低等優(yōu)點(diǎn),深受廣大中小企業(yè)的喜愛,下面這篇文章主要給大家介紹了關(guān)于MySQL中常用工具的相關(guān)資料,需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。
    2017-09-09
  • Mysql8.0使用窗口函數(shù)解決排序問題

    Mysql8.0使用窗口函數(shù)解決排序問題

    窗口的概念非常重要,它可以理解為記錄集合,窗口函數(shù)也就是在滿足某種條件的記錄集合上執(zhí)行的特殊函數(shù)。這篇文章主要介紹了Mysql8.0使用窗口函數(shù)解決排序問題,需要的朋友可以參考下
    2020-01-01
  • MySQL中字符串比較大小詳解(日期字符串比較問題)

    MySQL中字符串比較大小詳解(日期字符串比較問題)

    varchar類型的數(shù)據(jù)是不能直接比較大小的,下面這篇文章主要給大家介紹了關(guān)于MySQL中字符串比較大小的相關(guān)資料,詳細(xì)介紹了日期字符串比較問題,需要的朋友可以參考下
    2022-08-08
  • 以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句(詳細(xì)介紹)

    以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句(詳細(xì)介紹)

    本篇文章是對以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法

    MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法

    有時候,我們可能有這樣的場景,需要將銷量按月統(tǒng)計,并且按月逐月累加,本文就來介紹一下MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法,感興趣的可以了解一下
    2023-10-10

最新評論