首頁 > 資料庫 > mysql教程 > mysql預存程序和儲存函數有什麼差別

mysql預存程序和儲存函數有什麼差別

青灯夜游
發布: 2022-02-17 15:22:59
原創
16665 人瀏覽過

區別:1、儲存函數的限制比較多,而預存程序的限制相對比較少;2、儲存函數會向呼叫者傳回一個且僅有一個結果值,而預存程序會傳回一個或多個結果集;3、預存程序的參數型別有三種,儲存函數的參數型別只有一種。

mysql預存程序和儲存函數有什麼差別

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

什麼是預存程序?

預存程序是在大型資料庫系統中,一組為了完成特定功能的SQL語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者透過指定預存程序的名字和參數(如果該預存程序有參數)來執行它。預存程序是資料庫中的重要對象,任何一個設計良好的資料庫應用程式都應該用到預存程序。

優點:
(1)重複使用:預存程序可以重複使用,可以減少開發人員的工作量。
(2)提高效率:預存程序第一次使用的時候會編譯,一次編譯後以後不用再編譯,提高了效率。
(3)減少網路流量:預存程序位於伺服器上,呼叫的時候只需要傳遞預存程序的名稱以及參數就可以了,因此降低了網路傳輸的資料量。
(4)安全性:參數化的預存程序可以防止SQL注入,而且可以將Grant、Deny以及Revoke權限套用到預存程序。

缺點:
(1)偵錯麻煩
(2)移植性差
(3)維護性差

程式碼:

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
登入後複製

##什麼是儲存函數?

儲存函數為一組儲存程序,帶有函數名稱、參數,並傳回一個結果集。儲存函數和預存程序的結構類似,但必須有一個return 子句來傳回結果。

程式碼:

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
登入後複製
預存程序與儲存函數的差異

##1、總述

預存程序和儲存函數統稱為儲存例程。兩者的語法很相似,但卻是不同的內容。

儲存函數限制比較多,例如不能用臨時表,只能用表變數。還有一些函數都不可用等等。

而預存程序的限制就相對比較少,要實現的功能比較複雜一些。

2、傳回值上的不同

儲存函數將向呼叫者傳回一個且僅有一個結果值。

預存程序將傳回一個或多個結果集(函數做不到這一點),或者只是來實現某種效果或動作而無需傳回結果。

3、調用方式的不同

儲存函數嵌入在sql中使用的,可以在select中調用,就像內建函數一樣,例如cos()、sin() 。

4、參數的不同

儲存函數的參數類型類似IN參數

預存程序的參數類型有三種:IN參數、OUT參數、INOUT參數

###in:資料只是從外部傳入內部使用(值傳遞),可以是數值也可以是變數######out:只允許過程內部使用(不用外部資料),給外部使用的(引用傳遞:外部的資料會被先清空才會進入到內部),只能是變數######inout:外部可以在內部使用,內部修改的也可以給外部使用,典型的引用傳遞,只能傳遞變數。 ############預存程序是使用者定義的一系列sql語句的集合,設計特定表或其它物件的任務,使用者可以呼叫預存程序。 ######而函數通常是資料庫已定義的方法,它接收參數並傳回某種類型的值並且不涉及特定使用者表。 ######【相關推薦:###mysql影片教學###】####

以上是mysql預存程序和儲存函數有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板