本文小編為大家詳細(xì)介紹“MySQL存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)有哪些區(qū)別”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“mysql存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)有哪些區(qū)別”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)海林免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
區(qū)別:1、存儲(chǔ)函數(shù)的限制比較多,而存儲(chǔ)過(guò)程的限制相對(duì)比較少;2、存儲(chǔ)函數(shù)會(huì)向調(diào)用者返回一個(gè)且僅有一個(gè)結(jié)果值,而存儲(chǔ)過(guò)程會(huì)返回一個(gè)或多個(gè)結(jié)果集;3、存儲(chǔ)過(guò)程的參數(shù)類(lèi)型有三種,存儲(chǔ)函數(shù)的參數(shù)類(lèi)型只有一種。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
什么是存儲(chǔ)過(guò)程?
存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字和參數(shù)(如果該存儲(chǔ)過(guò)程有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。
優(yōu)點(diǎn):
(1)重復(fù)使用:存儲(chǔ)過(guò)程可以重復(fù)使用,可以減少開(kāi)發(fā)人員的工作量。
(2)提高效率:存儲(chǔ)過(guò)程在第一次使用的時(shí)候會(huì)編譯,一次編譯后以后不用再次編譯,提高了效率。
(3)減少網(wǎng)絡(luò)流量:存儲(chǔ)過(guò)程位于服務(wù)器上,調(diào)用的時(shí)候只需要傳遞存儲(chǔ)過(guò)程的名稱(chēng)以及參數(shù)就可以了,因此降低了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
(4)安全性:參數(shù)化的存儲(chǔ)過(guò)程可以防止SQL注入,而且可以將Grant、Deny以及Revoke權(quán)限應(yīng)用于存儲(chǔ)過(guò)程。
缺點(diǎn):
(1)調(diào)試麻煩
(2)移植性差
(3)維護(hù)性差
代碼:
CREATE DEFINER=`root`@`%` PROCEDURE `getName`(IN `uid` int,OUT my_uname VARCHAR(255)) BEGIN #Routine body goes here... select admin_name into my_uname from admin_user where id=uid; select my_uname; END
什么是存儲(chǔ)函數(shù)?
存儲(chǔ)函數(shù)為一組存儲(chǔ)程序,帶函數(shù)名、參數(shù),且返回一個(gè)結(jié)果集。存儲(chǔ)函數(shù)和存儲(chǔ)過(guò)程的結(jié)構(gòu)類(lèi)似,但必須有一個(gè)return 子句來(lái)返回結(jié)果。
代碼:
CREATE DEFINER=`root`@`%` FUNCTION `queryChildrenAreaInfo`(areaId INT) RETURNS varchar(4000) CHARSET utf8 BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000); SET sTemp='$'; SET sTempChd = CAST(areaId AS CHAR); WHILE sTempChd IS NOT NULL DO SET sTemp= CONCAT(sTemp,',',sTempChd); SELECT GROUP_CONCAT(id) INTO sTempChd FROM personal_dept WHERE FIND_IN_SET(dept_parentId,sTempChd)>0; END WHILE; RETURN sTemp; END
存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的區(qū)別
1、總述
存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)統(tǒng)稱(chēng)為存儲(chǔ)例程。兩者的語(yǔ)法很相似,但卻是不同的內(nèi)容。
存儲(chǔ)函數(shù)限制比較多,比如不能用臨時(shí)表,只能用表變量。還有一些函數(shù)都不可用等等。
而存儲(chǔ)過(guò)程的限制就相對(duì)比較少,要實(shí)現(xiàn)的功能比較復(fù)雜一些。
2、返回值上的不同
存儲(chǔ)函數(shù)將向調(diào)用者返回一個(gè)且僅有一個(gè)結(jié)果值。
存儲(chǔ)過(guò)程將返回一個(gè)或多個(gè)結(jié)果集(函數(shù)做不到這一點(diǎn)),或者只是來(lái)實(shí)現(xiàn)某種效果或動(dòng)作而無(wú)需返回結(jié)果。
3、調(diào)用方式的不同
存儲(chǔ)函數(shù)嵌入在sql中使用的,可以在select中調(diào)用,就像內(nèi)置函數(shù)一樣,比如cos()、sin()。
4、參數(shù)的不同
存儲(chǔ)函數(shù)的參數(shù)類(lèi)型類(lèi)似于IN參數(shù)
存儲(chǔ)過(guò)程的參數(shù)類(lèi)型有三種:IN參數(shù)、OUT參數(shù)、INOUT參數(shù)
in:數(shù)據(jù)只是從外部傳入內(nèi)部使用(值傳遞),可以是數(shù)值也可以是變量
out:只允許過(guò)程內(nèi)部使用(不用外部數(shù)據(jù)),給外部使用的(引用傳遞:外部的數(shù)據(jù)會(huì)被先清空才會(huì)進(jìn)入到內(nèi)部),只能是變量
inout:外部可以在內(nèi)部使用,內(nèi)部修改的也可以給外部使用,典型的引用 傳遞,只能傳遞變量。
存儲(chǔ)過(guò)程是用戶(hù)定義的一系列sql語(yǔ)句的集合,設(shè)計(jì)特定表或其它對(duì)象的任務(wù),用戶(hù)可以調(diào)用存儲(chǔ)過(guò)程。
而函數(shù)通常是數(shù)據(jù)庫(kù)已定義的方法,它接收參數(shù)并返回某種類(lèi)型的值并且不涉及特定用戶(hù)表。
讀到這里,這篇“mysql存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)有哪些區(qū)別”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享題目:mysql存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)有哪些區(qū)別
當(dāng)前地址:http://chinadenli.net/article14/gsgcge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站設(shè)計(jì)公司、、關(guān)鍵詞優(yōu)化、建站公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)