最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL的存儲函數(shù)與存儲過程相關(guān)概念與具體實例詳解

 更新時間:2023年03月01日 11:23:36   作者:瀛臺夜雪  
MySQL存儲函數(shù)(自定義函數(shù)),函數(shù)一般用于計算和返回一個值,可以將經(jīng)常需要使用的計算或功能寫成一個函數(shù),存儲函數(shù)和存儲過程一樣,都是在數(shù)據(jù)庫中定義一些SQL語句的集合

MySQL存儲過程與存儲函數(shù)的相關(guān)概念

存儲函數(shù)和存儲過程的主要區(qū)別:

  • 存儲函數(shù)一定會有返回值的
  • 存儲過程不一定有返回值

存儲過程和函數(shù)能后將復(fù)雜的SQL邏輯封裝在一起,應(yīng)用程序無需關(guān)注存儲過程和函數(shù)內(nèi)部復(fù)雜的SQL邏輯,而只需要簡單地調(diào)用存儲過程和函數(shù)即可

存儲過程

一組預(yù)先編譯的SQL語句的封裝

執(zhí)行過程:執(zhí)行過程預(yù)先存儲在MySQL服務(wù)器上,需要執(zhí)行的時候,客戶端只需要向服務(wù)器發(fā)出調(diào)用存儲過程的命令,服務(wù)器端就可以把預(yù)先存儲好的這一系列SQL語句全部執(zhí)行

  • 簡化操作,提高了SQL語句的重用性,減少了開發(fā)程序員的壓力
  • 減少操作過程中的失誤,提高效率
  • 減少網(wǎng)路傳輸量,客戶端不需要將所有的SQL語句通過網(wǎng)絡(luò)發(fā)給服務(wù)器
  • 減少SQL語句暴露在網(wǎng)上的風險,提高數(shù)據(jù)查詢的安全性

與視圖,函數(shù)的對比:

  • 視圖:是虛擬表,通常不對底層數(shù)據(jù)表直接操作
  • 存儲過程:程序化的SQL,可以直接操作底層數(shù)據(jù)表,相比于面向集合的操作方式,能夠?qū)崿F(xiàn)一些更復(fù)雜的數(shù)據(jù)處理
  • 相較于函數(shù),存儲過程沒有返回值

分類

  • 沒有參數(shù)(無參數(shù)無返回)
  • 僅僅帶有IN 類型 (有參數(shù)無返回)
  • 僅僅帶OUT類型(無參數(shù)有返回)
  • 即帶IN又帶OUT(有參數(shù)有返回)
  • 帶INOUT(有參數(shù)有返回)

創(chuàng)建存儲過程

DELIMITER $

CREATE PROCEDURE 存儲過程名 (IN|OUT|INOUT 參數(shù)名 參數(shù)類型,...)
[characteristics]
BEGIN
存儲過程體
END $

DELIMITER ;

DELIMITER $
CREATE PROCEDURE select_all_data()
BEGIN
	SELECT *
	FROM employees;
END $
DELIMITER ;

調(diào)用存儲過程

CALL select_all_data();

無參數(shù)無返回值

DELIMITER //
CREATE PROCEDURE avg_employee_salary()
BEGIN 
	SELECT AVG(salary) FROM emp;
END //
DELIMITER ;
CALL avg_employee_salary();

無參數(shù)有返回值

DELIMITER //
CREATE PROCEDURE show_min_salart(OUT ms DOUBLE)
BEGIN 
	SELECT MIN(salary) INTO ms
	FROM emp;
END //
DELIMITER ;
CALL show_min_salart(@ms);
SELECT @ms;

有參數(shù)無返回值

DELIMITER //
CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20))
BEGIN 
	SELECT salary
	FROM emp
	WHERE last_name=empname;
END //
DELIMITER ;
CALL show_someone_salary('Abel');
SET @empname='Abel';
CALL show_someone_salary(@empname)

有參數(shù)有返回值

DELIMITER //
CREATE PROCEDURE show_someone_salary2(IN empname VARCHAR(20),OUT empsalary DECIMAL(10,2))
BEGIN 
	SELECT salary INTO empsalary
	FROM emp
	WHERE last_name=empname;
END //
DELIMITER ;
SET @empname='Abel';
CALL show_someone_salary2(@empname,@empsalary);
SELECT @empsalary;

帶INOUT

DELIMITER //
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN 
SELECT last_name
FROM emp
Where employee_id=
(
	SELECT manager_id 
	FROM emp
	WHERE last_name=empname
);
END //
DELIMITER ;
SET @empname='Abel';
CALL show_mgr_name(@empname);
SELECT @empname;

如何調(diào)試

通過SELECT語句,把程序執(zhí)行的中間結(jié)果查詢出來,從而調(diào)試一個SQL語句的正確性。調(diào)試成功之后,把SELECT語句后移到下一個SQL語句,逐步推進查詢下一個 SQL語句

存儲函數(shù)

MySQL允許用戶自定義函數(shù),自定義好了之后,調(diào)用方式與調(diào)用MySQL預(yù)定義的系統(tǒng)函數(shù)一樣

創(chuàng)建存儲函數(shù)

CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類型)
RETURUNS 返回值類型
[characteristics]
BEGIN 
    函數(shù)體 #函數(shù)體中肯定有RETURN語句
END

  • 參數(shù)類型,F(xiàn)UNCTION 中總是默認為IN參數(shù)
  • RETURNS type 表示函數(shù)返回數(shù)據(jù)的類型,對于函數(shù)而言是強制的
  • characteristics 表示創(chuàng)建函數(shù)時指定的對函數(shù)的約束
  • 函數(shù)題可以用BEGIN … END表示SQL代碼的開始和結(jié)束。如果函數(shù)體只有一條語句,則可以省略BEGIN … END

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

SELECT 函數(shù)名(實參列表)

練習(xí)一

DELIMITER //
CREATE FUNCTION email_by_name()
RETURNS VARCHAR(25)
BEGIN
RETURN
(
	SELECT email
	FROM emp
	WHERE last_name='Abel'
);
END //
DELIMITER ;
SELECT email_by_name();

練習(xí)2

DELIMITER //
CREATE FUNCTION email_by_id(emp_id INT)
RETURNS VARCHAR(25)
BEGIN
RETURN
(
	SELECT email
	FROM emp
	WHERE employee_id=emp_id
);
END //
DELIMITER ;
SELECT email_by_id(101);
SET @emp_id=102;
SELECT email_by_id(@emp_id);

存儲函數(shù)與存儲過程的對比

  • 存儲過程 PEOCEDURE 存儲函數(shù) FUNCTION
  • 調(diào)用語法 CALL 存儲過程 SELECT 存儲函數(shù)
  • 存儲過程返回值可以有0個或?qū)Ω?存儲函數(shù)返回值只有一個
  • 存儲過程一般用于更新操作 存儲函數(shù)一般用于查詢結(jié)果為一個值并返回
  • 存儲函數(shù)可以放在查詢語句中使用,存儲過程則不行
  • 存儲過程功能更為強大,包括能夠執(zhí)行對表的操作(創(chuàng)建表,刪除表)和事務(wù)操作,這些功能是存儲函數(shù)并不具備的

存儲過程和函數(shù)的查看修改刪除

查看

使用SHOW CREATE 語句 查看創(chuàng)建信息

SHOW CREATE PROCEDURE show_mgr_name\G;
SHOW  CREATE FUNCTION email_by_id\G;

使用SHOW STATUS 語句查看存儲過程和函數(shù)的狀態(tài)信息

SHOW PROCEDURE STATUS;
SHOW PROCEDURE STATUS LIKE 'show_mgr_name' ;
SHOW FUNCTION STATUS LIKE 'email_by_name' ;

從information_schema.Routines表中查看存儲過程和函數(shù)的信息

SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_NAME='email_by_id' AND ROUTINE_TYPE='FUNCTION';
SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_NAME='show_min_salart' AND ROUTINE_TYPE='PROCEDURE';

修改存儲過程與函數(shù)

修改存儲過程或函數(shù),不影響存儲過程或函數(shù)功能,只是修改相關(guān)特征,使用ALTER語句實現(xiàn)

ALTER PROCEDURE|FUNCTION 存儲過程或函數(shù)名 [characteristic ...]

刪除存儲過程或函數(shù)

DROP PROCEDURE|FUNCTION [IF EXISTS] 存儲過程或函數(shù)名

到此這篇關(guān)于MySQL的存儲函數(shù)與存儲過程相關(guān)概念與具體實例詳解的文章就介紹到這了,更多相關(guān)MySQL的存儲函數(shù)與存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL UPDATE 語句的非標準實現(xiàn)代碼

    MySQL UPDATE 語句的非標準實現(xiàn)代碼

    這篇文章主要介紹了MySQL UPDATE 語句的非標準實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    所謂聯(lián)合就是把多個表的記錄往一起合并,一起進行查詢,也叫多表查詢,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Mysql去重的幾種方式分步講解

    Mysql去重的幾種方式分步講解

    SQL去重是數(shù)據(jù)分析工作中比較常見的一個場景,下面這篇文章主要給大家介紹了關(guān)于SQL去重的3種實用方法的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • mysql的數(shù)據(jù)壓縮性能對比詳情

    mysql的數(shù)據(jù)壓縮性能對比詳情

    這篇文章主要介紹了mysql的數(shù)據(jù)壓縮性能對比,今天對這兩種方式分別進行了測試,對比了二者在磁盤占用以及查詢性能方面各自的優(yōu)劣,下面我們大家一起進入文章了解詳細內(nèi)容,需要的朋友也可以參考一下
    2021-11-11
  • mysql查看死鎖與去除死鎖示例詳解

    mysql查看死鎖與去除死鎖示例詳解

    這篇文章主要給大家介紹了關(guān)于mysql查看死鎖與去除死鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL中常用的字段截取和字符串截取方法

    MySQL中常用的字段截取和字符串截取方法

    在 MySQL 數(shù)據(jù)庫中,有時我們需要截取字段或字符串的一部分進行查詢、展示或處理,本文將介紹 MySQL 中常用的字段截取和字符串截取方法,幫助你靈活處理數(shù)據(jù),需要的朋友可以參考下
    2024-01-01
  • 遠程登錄MySQL服務(wù)(小白入門篇)

    遠程登錄MySQL服務(wù)(小白入門篇)

    這篇文章主要為大家介紹了遠程登錄MySQL服務(wù)(小白入門篇)
    2023-05-05
  • MySQL GTID集合運算函數(shù)總結(jié)

    MySQL GTID集合運算函數(shù)總結(jié)

    本文主要介紹了MySQL GTID集合運算函數(shù)總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Navicat連接虛擬機mysql常見錯誤問題及解決方法

    Navicat連接虛擬機mysql常見錯誤問題及解決方法

    這篇文章主要介紹了Navicat連接虛擬機mysql常見錯誤問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • mysql刪除重復(fù)記錄語句的方法

    mysql刪除重復(fù)記錄語句的方法

    查詢及刪除重復(fù)記錄的SQL語句,雖然有點亂,但內(nèi)容還是不錯的。
    2010-06-06

最新評論

新兴县| 全州县| 巫山县| 思茅市| 扶沟县| 客服| 阜康市| 浏阳市| 方正县| 石河子市| 岳阳县| 霍城县| 兖州市| 三亚市| 平泉县| 射洪县| 汝阳县| 商都县| 绥芬河市| 鲁甸县| 新竹县| 安西县| 绵竹市| 天水市| 邳州市| 莲花县| 罗定市| 饶平县| 临武县| 康平县| 宜兰市| 舟山市| 民勤县| 芦溪县| 韶山市| 永平县| 绥宁县| 石楼县| 浠水县| 无锡市| 泰宁县|