久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql存儲過程的作用是什么

171次閱讀
沒有評論

共計 5175 個字符,預計需要花費 13 分鐘才能閱讀完成。

本篇內容主要講解“mysql 存儲過程的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“mysql 存儲過程的作用是什么”吧!

mysql 存儲過程的作用:1、通過把處理封裝在容易使用的單元中,簡化復雜的操作;2、簡化對變動的管理;3、有助于提高應用程序的性能;4、有助于減少應用程序和數據庫服務器之間的流量,因為應用程序不必發送多個冗長的 SQL 語句,而只用發送存儲過程的名稱和參數;5、可增強 SQL 語句的功能和靈活性,使 mysql 能完成復雜的判斷和較復雜的運算;6、可提高數據庫的安全性和數據的完整性等等。

存儲過程簡介

存儲過程是一組為了完成特定功能的 SQL 語句集合。使用存儲過程的目的是將常用或復雜的工作預先用 SQL 語句寫好并用一個指定名稱存儲起來,這個過程經編譯和優化后存儲在數據庫服務器中,因此稱為存儲過程。當以后需要數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用“CALL 存儲過程名字”即可自動完成。

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

一個存儲過程是一個可編程的函數,它在數據庫中創建并保存,一般由 SQL 語句和一些特殊的控制結構組成。當希望在不同的應用程序或平臺上執行相同的特定功能時,存儲過程尤為合適。

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

存儲過程是數據庫中的一個重要功能,存儲過程可以用來轉換數據、數據遷移、制作報表,它類似于編程語言,一次執行成功,就可以隨時被調用,完成指定的功能操作。

使用存儲過程不僅可以提高數據庫的訪問效率,同時也可以提高數據庫使用的安全性。

對于調用者來說,存儲過程封裝了 SQL 語句,調用者無需考慮邏輯功能的具體實現過程。只是簡單調用即可,它可以被 Java 和 C# 等編程語言調用。

存儲過程的作用(優點)

通過把處理封裝在容易使用的單元中,簡化復雜的操作;

簡化對變動的管理。如果表名、列名或業務邏輯有變化。只需要更改存儲過程的代碼,使用它的人員不會改自己的代碼;

通常存儲過程有助于提高應用程序的性能。當創建的存儲過程被編譯之后,就存儲在數據庫中。但是,MySQL 實現的存儲過程略有不同。MySQL 存儲過程按需編譯。在編譯存儲過程之后,MySQL 將其放入緩存中。MySQL 為每個連接維護自己的存儲過程高速緩存。如果應用程序在單個連接中多次使用存儲過程,則使用編譯版本,否則存儲過程的工作方式類似于查詢;

存儲過程有助于減少應用程序和數據庫服務器之間的流量,因為應用程序不必發送多個冗長的 SQL 語句,而只用發送存儲過程的名稱和參數;

可增強 SQL 語句的功能和靈活性

存儲過程可以用流程控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。

提高數據庫的安全性和數據的完整性

存儲過程提高安全性的一個方案就是把它作為中間組件,存儲過程里可以對某些表做相關操作,然后存儲過程作為接口提供給外部程序。這樣,外部程序無法直接操作數據庫表,只能通過存儲過程來操作對應的表,因此在一定程度上,安全性是可以得到提高的。

使數據獨立

數據的獨立可以達到解耦的效果,也就是說,程序可以調用存儲過程,來替代執行多條的 SQL 語句。這種情況下,存儲過程把數據同用戶隔離開來,優點就是當數據表的結構改變時,調用表不用修改程序,只需要數據庫管理者重新編寫存儲過程即可。

存儲過程的缺點

如果使用大量存儲過程,那么使用這些存儲過程的每個連接的內存使用量將會大大增加。此外,如果您在存儲過程中過度使用大量邏輯操作,則 CPU 使用率也會增加,因為 MySQL 數據庫最初的設計側重于高效的查詢,不利于邏輯運算;

存儲過程的構造使得開發具有復雜業務邏輯的存儲過程變得更加困難;

很難調試存儲過程。只有少數數據庫管理系統允許您調試存儲過程。不幸的是,MySQL 不提供調試存儲過程的功能;

開發和維護存儲過程并不容易。開發和維護存儲過程通常需要一個不是所有應用程序開發人員擁有的專業技能。這可能會導致應用程序開發和維護階段的問題。

MySQL 中的存儲過程創建與調用過程

創建存儲過程,代碼如下所示:

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

運行結果如下

也可以在 Navicat 客戶端“函數”節點下查看過程,如下圖所示:

調用存儲過程,代碼如下所示:

call mypro(1,2,@s);--  調用存儲過程  
select @s;--  顯示過程輸出結果 

運行結果

存儲過程語法解析

create procedure 用來創建過程;

mypro 用來定義過程名稱;

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

begin 與 end 表示過程主體的開始和結束,相當于 Java 定義方法的一對大括號;

call 用來調用過程,@s 是用來接收過程輸出參數的變量

存儲過程的參數

MySQL 存儲過程的參數用在存儲過程的定義,共有三種參數類型:

IN 輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變量);

OUT 輸出參數:表示過程向調用者傳出值 (可以返回多個值)(傳出值只能是變量);

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

存儲過程根據參數可分為四種類別:

1). 沒有參數的過程;

2). 只有輸入參數的過程;

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

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

變量

MySQL 中的存儲過程類似 java 中的方法。

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

變量定義

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

declare 用于聲明變量;

variable_name 表示變量名稱;

datatype 為 MySQL 的數據類型;

default 用于聲明默認值;

例如:

declare name varchar(20) default‘jack’。

變量賦值

SET  變量名  =  表達式值  [,variable_name = expression ...]

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

use schooldb;--  使用  schooldb  數據庫
--  創建過程
create procedure mypro1()
begin
declare name varchar(20);
set name =  丘處機 
select * from studentinfo where studentname = name;
--  調用過程
call mypro1();

運行結果

流程控制語句 if 條件語句

IF 語句包含多個條件判斷,根據結果為 TRUE、FALSE 執行語句,與編程語言中的 if、else if、else 語法類似。

定義存儲過程,輸入一個整數,使用 if 語句判斷是正數還是負數,代碼如下所示:

--  創建過程
create procedure mypro2(in num int)
begin
if num 0 then --  條件開始
select  負數 
elseif num=0 then
select  不是正數也不是負數 
select  正數 
end if;--  條件結束
--  調用過程
call mypro2(-1);

運行結果

case 條件語句

case 是另一個條件判斷的語句,類似于編程語言中的 choose、when 語法。MySQL 中的 case 語句有兩種語法
格式。

定義存儲過程,輸入一個整數,使用 case 語句判斷是正數還是負數,代碼如下所示:

--  創建過程
create procedure mypro3(in num int)
begin
case --  條件開始
when num 0 then select  負數 
when num=0 then select  不是正數也不是負數 
else select  正數 
end case; --  條件結束
--  調用過程
call mypro3(1);

運行結果

定義存儲過程,輸入一個整數,使用 case 語句判斷是 1 還是 2,代碼如下所示:

--  創建過程
create procedure mypro4(in num int)
begin
case num --  條件開始
when 1 then select  數值是  1 
when 2 then select  數值是  2 
else select  不是  1  也不是  2 
end case; --  條件結束
--  調用過程
call mypro4(3);

運行結果

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

while 循環語句

while 語句的用法和 java 中的 while 循環類似。

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

--  創建過程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num 10 do --  循環開始
set num = num+1;
set sum = sum+num;
end while; --  循環結束
--  調用過程
call mypro5(@sum);
--  查詢變量值
select @sum;

運行結果

repeat 循環語句

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

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

--  創建過程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat--  循環開始
set num = num+1;
set sum = sum+num;
until num =10
end repeat; --  循環結束
--  調用過程
call mypro6(@sum);
--  查詢變量值
select @sum;

運行結果

loop 循環語句

循環語句,用來重復執行某些語句。

執行過程中可使用 leave 語句或 iterate 跳出循環,也可以嵌套 IF 等判斷語句。

leave 語句效果相當于 java 中的 break,用來終止循環;

iterate 語句效果相當于 java 中的 continue,用來結束本次循環操作,進入下一次循環。

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

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

運行結果

代碼中的 loop_sum 相當于給循環貼個標簽,方便多重循環時靈活操作。

存儲過程的管理

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

比較簡單的方式就是利用 navicat 客戶端工具進行管理,鼠標點擊操作即可,如下圖所示:

mysql 存儲過程的作用是什么

顯示存儲過程

SHOW PROCEDURE STATUS;

顯示特定數據庫的存儲過程

SHOW PROCEDURE status where db =  schooldb

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

SHOW PROCEDURE status where name like  %my%

顯示存儲過程“mypro1”的源碼

SHOW CREATE PROCEDURE mypro1;

mysql 存儲過程的作用是什么

刪除存儲過程“mypro1”

drop PROCEDURE mypro1;

到此,相信大家對“mysql 存儲過程的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計5175字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 眉山市| 海南省| 华宁县| 阜新市| 临清市| 武夷山市| 兴业县| 大理市| 庆安县| 黑河市| 庆城县| 宣汉县| 鄂伦春自治旗| 吴旗县| 古丈县| 和林格尔县| 威远县| 龙口市| 乌苏市| 三门峡市| 奎屯市| 临洮县| 玉门市| 东丽区| 友谊县| 临沧市| 天津市| 扎囊县| 革吉县| 昌都县| 抚顺县| 沧州市| 青海省| 龙江县| 多伦县| 儋州市| 翼城县| 阿克陶县| 新疆| 临安市| 柳江县|