欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql存儲(chǔ)過程的作用是什么

本篇內(nèi)容主要講解“MySQL存儲(chǔ)過程的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“mysql存儲(chǔ)過程的作用是什么”吧!

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)塔什庫爾干塔吉克,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

mysql存儲(chǔ)過程的作用:1、通過把處理封裝在容易使用的單元中,簡(jiǎn)化復(fù)雜的操作;2、簡(jiǎn)化對(duì)變動(dòng)的管理;3、有助于提高應(yīng)用程序的性能;4、有助于減少應(yīng)用程序和數(shù)據(jù)庫服務(wù)器之間的流量,因?yàn)閼?yīng)用程序不必發(fā)送多個(gè)冗長(zhǎng)的SQL語句,而只用發(fā)送存儲(chǔ)過程的名稱和參數(shù);5、可增強(qiáng)SQL語句的功能和靈活性,使mysql能完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算;6、可提高數(shù)據(jù)庫的安全性和數(shù)據(jù)的完整性等等。

存儲(chǔ)過程簡(jiǎn)介

存儲(chǔ)過程是一組為了完成特定功能的 SQL 語句集合。使用存儲(chǔ)過程的目的是將常用或復(fù)雜的工作預(yù)先用 SQL 語句寫好并用一個(gè)指定名稱存儲(chǔ)起來,這個(gè)過程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫服務(wù)器中,因此稱為存儲(chǔ)過程。當(dāng)以后需要數(shù)據(jù)庫提供與已定義好的存儲(chǔ)過程的功能相同的服務(wù)時(shí),只需調(diào)用“CALL存儲(chǔ)過程名字”即可自動(dòng)完成。

常用操作數(shù)據(jù)庫的 SQL 語句在執(zhí)行的時(shí)候需要先編譯,然后執(zhí)行。存儲(chǔ)過程則采用另一種方式來執(zhí)行 SQL 語句。

一個(gè)存儲(chǔ)過程是一個(gè)可編程的函數(shù),它在數(shù)據(jù)庫中創(chuàng)建并保存,一般由 SQL 語句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺(tái)上執(zhí)行相同的特定功能時(shí),存儲(chǔ)過程尤為合適。

MySQL 5.0 版本以前并不支持存儲(chǔ)過程,這使 MySQL 在應(yīng)用上大打折扣。MySQL 從 5.0 版本開始支持存儲(chǔ)過程,既提高了數(shù)據(jù)庫的處理速度,同時(shí)也提高了數(shù)據(jù)庫編程的靈活性

存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)重要功能,存儲(chǔ)過程可以用來轉(zhuǎn)換數(shù)據(jù)、數(shù)據(jù)遷移、制作報(bào)表,它類似于編程語言,一次執(zhí)行成功,就可以隨時(shí)被調(diào)用,完成指定的功能操作。

使用存儲(chǔ)過程不僅可以提高數(shù)據(jù)庫的訪問效率,同時(shí)也可以提高數(shù)據(jù)庫使用的安全性。

對(duì)于調(diào)用者來說,存儲(chǔ)過程封裝了 SQL 語句,調(diào)用者無需考慮邏輯功能的具體實(shí)現(xiàn)過程。只是簡(jiǎn)單調(diào)用即可,它可以被 Java 和 C# 等編程語言調(diào)用。

存儲(chǔ)過程的作用(優(yōu)點(diǎn))

  • 通過把處理封裝在容易使用的單元中,簡(jiǎn)化復(fù)雜的操作;

  • 簡(jiǎn)化對(duì)變動(dòng)的管理。如果表名、列名或業(yè)務(wù)邏輯有變化。只需要更改存儲(chǔ)過程的代碼,使用它的人員不會(huì)改自己的代碼;

  • 通常存儲(chǔ)過程有助于提高應(yīng)用程序的性能。當(dāng)創(chuàng)建的存儲(chǔ)過程被編譯之后,就存儲(chǔ)在數(shù)據(jù)庫中。 但是,MySQL 實(shí)現(xiàn)的存儲(chǔ)過程略有不同。MySQL 存儲(chǔ)過程按需編譯。在編譯存儲(chǔ)過程之后,MySQL 將其放入緩存中。MySQL 為每個(gè)連接維護(hù)自己的存儲(chǔ)過程高速緩存。如果應(yīng)用程序在單個(gè)連接中多次使用存儲(chǔ)過程,則使用編譯版本,否則存儲(chǔ)過程的工作方式類似于查詢;

  • 存儲(chǔ)過程有助于減少應(yīng)用程序和數(shù)據(jù)庫服務(wù)器之間的流量,因?yàn)閼?yīng)用程序不必發(fā)送多個(gè)冗長(zhǎng)的 SQL 語句,而只用發(fā)送存儲(chǔ)過程的名稱和參數(shù);

  • 可增強(qiáng) SQL 語句的功能和靈活性

    存儲(chǔ)過程可以用流程控制語句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。

  • 提高數(shù)據(jù)庫的安全性和數(shù)據(jù)的完整性

    存儲(chǔ)過程提高安全性的一個(gè)方案就是把它作為中間組件,存儲(chǔ)過程里可以對(duì)某些表做相關(guān)操作,然后存儲(chǔ)過程作為接口提供給外部程序。這樣,外部程序無法直接操作數(shù)據(jù)庫表,只能通過存儲(chǔ)過程來操作對(duì)應(yīng)的表,因此在一定程度上,安全性是可以得到提高的。

  • 使數(shù)據(jù)獨(dú)立

    數(shù)據(jù)的獨(dú)立可以達(dá)到解耦的效果,也就是說,程序可以調(diào)用存儲(chǔ)過程,來替代執(zhí)行多條的 SQL 語句。這種情況下,存儲(chǔ)過程把數(shù)據(jù)同用戶隔離開來,優(yōu)點(diǎn)就是當(dāng)數(shù)據(jù)表的結(jié)構(gòu)改變時(shí),調(diào)用表不用修改程序,只需要數(shù)據(jù)庫管理者重新編寫存儲(chǔ)過程即可。

存儲(chǔ)過程的缺點(diǎn)

  • 如果使用大量存儲(chǔ)過程,那么使用這些存儲(chǔ)過程的每個(gè)連接的內(nèi)存使用量將會(huì)大大增加。 此外,如果您在存儲(chǔ)過程中過度使用大量邏輯操作,則 CPU 使用率也會(huì)增加,因?yàn)?MySQL 數(shù)據(jù)庫最初的設(shè)計(jì)側(cè)重于高效的查詢,不利于邏輯運(yùn)算;

  • 存儲(chǔ)過程的構(gòu)造使得開發(fā)具有復(fù)雜業(yè)務(wù)邏輯的存儲(chǔ)過程變得更加困難;

  • 很難調(diào)試存儲(chǔ)過程。只有少數(shù)數(shù)據(jù)庫管理系統(tǒng)允許您調(diào)試存儲(chǔ)過程。不幸的是,MySQL 不提供調(diào)試存儲(chǔ)過程的功能;

  • 開發(fā)和維護(hù)存儲(chǔ)過程并不容易。開發(fā)和維護(hù)存儲(chǔ)過程通常需要一個(gè)不是所有應(yīng)用程序開發(fā)人員擁有的專業(yè)技能。這可能會(huì)導(dǎo)致應(yīng)用程序開發(fā)和維護(hù)階段的問題。

MySQL 中的存儲(chǔ)過程

創(chuàng)建與調(diào)用過程

創(chuàng)建存儲(chǔ)過程,代碼如下所示:

-- 創(chuàng)建存儲(chǔ)過程 
create procedure mypro(in a int,in b int,out sum int) 
begin 
set sum = a+b; 
end;

運(yùn)行結(jié)果如下

mysql存儲(chǔ)過程的作用是什么

也可以在 Navicat 客戶端“函數(shù)”節(jié)點(diǎn)下查看過程,如下圖所示:

mysql存儲(chǔ)過程的作用是什么

調(diào)用存儲(chǔ)過程,代碼如下所示:

call mypro(1,2,@s);-- 調(diào)用存儲(chǔ)過程 
select @s;-- 顯示過程輸出結(jié)果

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

存儲(chǔ)過程語法解析

  • create procedure 用來創(chuàng)建過程;

  • mypro 用來定義過程名稱;

  • (in a int,in b int,out sum int)表示過程的參數(shù),其中 in 表示輸入?yún)?shù),out 表示輸出參數(shù)。類似于 Java 定義方法時(shí)的形參和返回值;

  • beginend 表示過程主體的開始和結(jié)束,相當(dāng)于 Java 定義方法的一對(duì)大括號(hào);

  • call用來調(diào)用過程,@s 是用來接收過程輸出參數(shù)的變量

存儲(chǔ)過程的參數(shù)

MySQL 存儲(chǔ)過程的參數(shù)用在存儲(chǔ)過程的定義,共有三種參數(shù)類型:

  • IN 輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量);

  • OUT 輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個(gè)值)(傳出值只能是變量);

  • INOUT輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)。

存儲(chǔ)過程根據(jù)參數(shù)可分為四種類別:

1).沒有參數(shù)的過程;

2).只有輸入?yún)?shù)的過程;

3).只有輸出參數(shù)的過程;

4).包含輸入和輸出參數(shù)的過程。

變量

MySQL 中的存儲(chǔ)過程類似 java 中的方法。

既然如此,在存儲(chǔ)過程中也同樣可以使用變量。java 中的局部變量作用域是變量所在的方法,而 MySQL 中的局部變量作用域是所在的存儲(chǔ)過程。

變量定義

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

  • declare用于聲明變量;

  • variable_name表示變量名稱;

  • datatype為 MySQL 的數(shù)據(jù)類型;

  • default用于聲明默認(rèn)值;

  • 例如:

    declare name varchar(20) default ‘jack’。

變量賦值

SET 變量名 = 表達(dá)式值 [,variable_name = expression ...]

在存儲(chǔ)過程中使用變量,代碼如下所示

use schooldb;-- 使用 schooldb 數(shù)據(jù)庫
-- 創(chuàng)建過程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘處機(jī)';
select * from studentinfo where studentname = name;
end;
-- 調(diào)用過程
call mypro1();

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

流程控制語句

if 條件語句

IF 語句包含多個(gè)條件判斷,根據(jù)結(jié)果為 TRUEFALSE執(zhí)行語句,與編程語言中的 ifelse ifelse 語法類似。

定義存儲(chǔ)過程,輸入一個(gè)整數(shù),使用 if 語句判斷是正數(shù)還是負(fù)數(shù),代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro2(in num int)
begin
if num<0 then -- 條件開始
select '負(fù)數(shù)';
elseif num=0 then
select '不是正數(shù)也不是負(fù)數(shù)';
else
select '正數(shù)';
end if;-- 條件結(jié)束
end;
-- 調(diào)用過程
call mypro2(-1);

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

case 條件語句

case是另一個(gè)條件判斷的語句,類似于編程語言中的 choosewhen語法。MySQL 中的 case語句有兩種語法
格式。

定義存儲(chǔ)過程,輸入一個(gè)整數(shù),使用 case 語句判斷是正數(shù)還是負(fù)數(shù),代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro3(in num int)
begin
case -- 條件開始
when num<0 then select '負(fù)數(shù)';
when num=0 then select '不是正數(shù)也不是負(fù)數(shù)';
else select '正數(shù)';
end case; -- 條件結(jié)束
end;
-- 調(diào)用過程
call mypro3(1);

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

定義存儲(chǔ)過程,輸入一個(gè)整數(shù),使用 case 語句判斷是 1 還是 2,代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro4(in num int)
begin
case num -- 條件開始
when 1 then select '數(shù)值是 1';
when 2 then select '數(shù)值是 2';
else select '不是 1 也不是 2';
end case; -- 條件結(jié)束
end;
-- 調(diào)用過程
call mypro4(3);

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

兩種 case 語法都可以實(shí)現(xiàn)條件判斷,但第一種適合范圍值判斷,而第二種適合確定值判斷。

while 循環(huán)語句

while語句的用法和 java中的 while循環(huán)類似。

定義存儲(chǔ)過程,使用 while 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<10 do -- 循環(huán)開始
set num = num+1;
set sum = sum+num;
end while; -- 循環(huán)結(jié)束
end;
-- 調(diào)用過程
call mypro5(@sum);
-- 查詢變量值
select @sum;

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

repeat 循環(huán)語句

repeat語句的用法和 java中的 do…while 語句類似,都是先執(zhí)行循環(huán)操作,再判斷條件,區(qū)別是 repeat表達(dá)
式值為 false時(shí)才執(zhí)行循環(huán)操作,直到表達(dá)式值為 true停止。

定義存儲(chǔ)過程,使用 repeat 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循環(huán)開始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循環(huán)結(jié)束
end;
-- 調(diào)用過程
call mypro6(@sum);
-- 查詢變量值
select @sum;

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

loop 循環(huán)語句

循環(huán)語句,用來重復(fù)執(zhí)行某些語句。

執(zhí)行過程中可使用 leave語句或 iterate 跳出循環(huán),也可以嵌套 IF等判斷語句。

  • leave語句效果相當(dāng)于 java 中的 break,用來終止循環(huán);

  • iterate語句效果相當(dāng)于 java 中的 continue,用來結(jié)束本次循環(huán)操作,進(jìn)入下一次循環(huán)。

定義存儲(chǔ)過程,使用 loop 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

-- 創(chuàng)建過程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循環(huán)開始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循環(huán)結(jié)束
end;
-- 調(diào)用過程
call mypro7(@sum);
-- 查詢變量值
select @sum;

運(yùn)行結(jié)果

mysql存儲(chǔ)過程的作用是什么

代碼中的 loop_sum 相當(dāng)于給循環(huán)貼個(gè)標(biāo)簽,方便多重循環(huán)時(shí)靈活操作。

存儲(chǔ)過程的管理

存儲(chǔ)過程的管理主要包括:顯示過程、顯示過程源碼、刪除過程。

比較簡(jiǎn)單的方式就是利用 navicat 客戶端工具進(jìn)行管理,鼠標(biāo)點(diǎn)擊操作即可,如下圖所示:

mysql存儲(chǔ)過程的作用是什么

顯示存儲(chǔ)過程

SHOW PROCEDURE STATUS;

顯示特定數(shù)據(jù)庫的存儲(chǔ)過程

SHOW PROCEDURE status where db = 'schooldb';

顯示特定模式的存儲(chǔ)過程,要求顯示名稱中包含“my”的存儲(chǔ)過程

SHOW PROCEDURE status where name like '%my%';

顯示存儲(chǔ)過程“mypro1”的源碼

SHOW CREATE PROCEDURE mypro1;

mysql存儲(chǔ)過程的作用是什么

刪除存儲(chǔ)過程“mypro1”

drop PROCEDURE mypro1;

到此,相信大家對(duì)“mysql存儲(chǔ)過程的作用是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前題目:mysql存儲(chǔ)過程的作用是什么
URL鏈接:http://www.chinadenli.net/article46/gooihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站響應(yīng)式網(wǎng)站小程序開發(fā)網(wǎng)站導(dǎo)航App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司