最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

mysql_存儲過程與存儲函數(shù)

2023-03-03 10:18 作者:蘇喆i  | 我要投稿

一.存儲過程概述

1.理解

含義:存儲過程的英文是 Stored Procedure 。它的思想很簡單,就是一組經(jīng)過 預(yù)先編譯 的 SQL 語句 的封裝。?

好處:

1、簡化操作,提高了sql語句的重用性,減少了開發(fā)程序員的壓力?

2、減少操作過程中的失誤,提高效率?

3、減少網(wǎng)絡(luò)傳輸量(客戶端不需要把所有的 SQL 語句通過網(wǎng)絡(luò)發(fā)給服務(wù)器)?

4、減少了 SQL 語句暴露在 網(wǎng)上的風(fēng)險,也提高了數(shù)據(jù)查詢的安全性

和視圖、函數(shù)的對比:

它和視圖有著同樣的優(yōu)點(diǎn),清晰、安全,還可以減少網(wǎng)絡(luò)傳輸量。不過它和視圖不同,視圖是 虛擬表 , 通常不對底層數(shù)據(jù)表直接操作,而存儲過程是程序化的 SQL,可以 直接操作底層數(shù)據(jù)表 ,相比于面向集 合的操作方式,能夠?qū)崿F(xiàn)一些更復(fù)雜的數(shù)據(jù)處理。

一旦存儲過程被創(chuàng)建出來,使用它就像使用函數(shù)一樣簡單,我們直接通過調(diào)用存儲過程名即可。相較于 函數(shù),存儲過程是 沒有返回值 的。


2.分類

存儲過程的參數(shù)類型可以是IN、OUT和INOUT。

1、沒有參數(shù)(無參數(shù)無返回)?

2、僅僅帶 IN 類型(有參數(shù)無返回)?

3、僅僅帶 OUT 類型(無參數(shù)有返 回)?

4、既帶 IN 又帶 OUT(有參數(shù)有返回)?

5、帶 INOUT(有參數(shù)有返回)

注意:IN、OUT、INOUT 都可以在一個存儲過程中帶多個。

二. 創(chuàng)建存儲過程

語法:

1、參數(shù)前面的符號的意思?

IN :當(dāng)前參數(shù)為輸入?yún)?shù),也就是表示入?yún)ⅲ?存儲過程只是讀取這個參數(shù)的值。如果沒有定義參數(shù)種類, 默認(rèn)就是 IN ,表示輸入?yún)?shù)。

OUT :當(dāng)前參數(shù)為輸出參數(shù),也就是表示出參; 執(zhí)行完成之后,調(diào)用這個存儲過程的客戶端或者應(yīng)用程序就可以讀取這個參數(shù)返回的值了。

INOUT :當(dāng)前參數(shù)既可以為輸入?yún)?shù),也可以為輸出參數(shù)。

2、形參類型可以是 MySQL數(shù)據(jù)庫中的任意類型。

三. 調(diào)用存儲過程

1.調(diào)用格式

2.舉例:創(chuàng)建存儲過程,實(shí)現(xiàn)累加運(yùn)算,計算 1+2+…+n 等于多少。具體的代碼如下:

3.如何調(diào)式

在 MySQL 中,存儲過程不像普通的編程語言(比如 VC++、Java 等)那樣有專門的集成開發(fā)環(huán)境。因此,你可以通過 SELECT 語句,把程序執(zhí)行的中間結(jié)果查詢出來,來調(diào)試一個 SQL 語句的正確性。調(diào)試成功之后,把 SELECT 語句后移到下一個 SQL 語句之后,再調(diào)試下一個 SQL 語句。這樣 逐步推進(jìn) ,就可以完成對存儲過程中所有操作的調(diào)試了。當(dāng)然,你也可以把存儲過程中的 SQL 語句復(fù)制出來,逐段單獨(dú)調(diào)試。

. 存儲函數(shù)的使用

語法:

說明:

1、參數(shù)列表:指定參數(shù)為IN、OUT或INOUT只對PROCEDURE是合法的,F(xiàn)UNCTION中總是默認(rèn)為IN參數(shù)。?

2、RETURNS type 語句表示函數(shù)返回數(shù)據(jù)的類型; RETURNS子句只能對FUNCTION做指定,對函數(shù)而言這是 強(qiáng)制 的。它用來指定函數(shù)的返回類型,而且函數(shù)體必須包含一個 RETURN value 語句。?

3、characteristic 創(chuàng)建函數(shù)時指定的對函數(shù)的約束。取值與創(chuàng)建存儲過程時相同,這里不再贅述。?

4、函數(shù)體也可以用BEGIN…END來表示SQL代碼的開始和結(jié)束。如果函數(shù)體只有一條語句,也可以省略 BEGIN…END。

調(diào)用存儲函數(shù)

五.對比存儲函數(shù)和存儲過程

此外,存儲函數(shù)可以放在查詢語句中使用,存儲過程不行。反之,存儲過程的功能更加強(qiáng)大,包括能夠 執(zhí)行對表的操作(比如創(chuàng)建表,刪除表等)和事務(wù)操作,這些功能是存儲函數(shù)不具備的。

六.關(guān)于存儲過程使用的爭議

盡管存儲過程有諸多優(yōu)點(diǎn),但是對于存儲過程的使用,一直都存在著很多爭議,比如有些公司對于大型 項(xiàng)目要求使用存儲過程,而有些公司在手冊中明確禁止使用存儲過程,為什么這些公司對存儲過程的使用需求差別這么大呢?

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

1、存儲過程可以一次編譯多次使用。

2、可以減少開發(fā)工作量。

3、存儲過程的安全性強(qiáng)。

4、可以減少網(wǎng)絡(luò)傳輸量。

5、良好的封裝性。

缺點(diǎn)

1、可移植性差。

2、調(diào)試?yán)щy。

3、存儲過程的版本管理很困難。

4、它不適合高并發(fā)的場景。


mysql_存儲過程與存儲函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
南阳市| 喀什市| 武平县| 宜昌市| 榆林市| 天峻县| 施甸县| 鄯善县| 荥阳市| 和平区| 淮阳县| 沁水县| 湘西| 平舆县| 布拖县| 文昌市| 静安区| 万山特区| 菏泽市| 盐边县| 乌鲁木齐市| 西吉县| 常州市| 扶绥县| 迭部县| 姚安县| 普洱| 肇州县| 江陵县| 盘山县| 大埔县| 遵化市| 邵东县| 象州县| 太原市| 长顺县| 临江市| 嘉荫县| 南召县| 固阳县| 余姚市|