人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

MySQL之存儲函數(shù)詳細(xì)介紹

發(fā)布日期:2022-02-01 17:01 | 文章來源:CSDN

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

語法格式:

CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類型,...) 
RETURNS 返回值類型
BEGIN
	函數(shù)體   #函數(shù)體中肯定有 RETURN 語句
END

說明:

參數(shù)列表:

FUNCTION中總是默認(rèn)為IN參數(shù)

RETURNS 后的語句表示函數(shù)返回數(shù)據(jù)的類型;

RETURNS子句只能對FUNCTION做指定,對函數(shù)而言這是強制的。它用來指定函數(shù)的返回類型,而且函數(shù)體必須包含一個RETURN value語句。

函數(shù)體也可以用BEGIN…END來表示SQL代碼的開始和結(jié)束。

如果函數(shù)體只有一條語句,也可以省略BEGIN…END。

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

在MySQL中,存儲函數(shù)的使用方法與MySQL內(nèi)部函數(shù)的使用方法是一樣的。換言之,用戶自己定義的存儲函數(shù)與MySQL內(nèi)部函數(shù)是一個性質(zhì)的。區(qū)別在于,存儲函數(shù)是用戶自己定義的,而內(nèi)部函數(shù)是MySQL的開發(fā)者定義的。

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

3、刪除存儲函數(shù)

語法結(jié)構(gòu):

DROP FUNCTION [IF EXISTS] 存儲函數(shù)名

4、查看存儲過程

1. 使用SHOW CREATE語句查看存儲過程和函數(shù)的創(chuàng)建信息

語法結(jié)構(gòu):

SHOW CREATE FUNCTION 存儲函數(shù)名

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

語法結(jié)構(gòu):

SHOW FUNCTION STATUS [LIKE 'pattern']

這個語句返回子程序的特征,如數(shù)據(jù)庫、名字、類型、創(chuàng)建者及創(chuàng)建和修改日期。

[LIKE 'pattern']匹配存儲函數(shù)的名稱,可以省略。當(dāng)省略不寫時,會列出MySQL數(shù)據(jù)庫中存在的所有存儲函數(shù)的信息。

舉例:

#查詢名稱以select開頭的存儲函數(shù)
mysql> SHOW FUNCTION STATUS LIKE 'SELECT%';
*************************** 1. row ***************************
                  Db: test_db
                Name: SelectAllData
                Type: FUNCTION 
             Definer: root@localhost
            Modified: 2021-10-16 15:55:07
             Created: 2021-10-16 15:55:07
       Security_type: DEFINER
             Comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci

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

MySQL中存儲函數(shù)的信息存儲在information_schema數(shù)據(jù)庫下的Routines表中??梢酝ㄟ^查詢該表的記錄來查詢存儲函數(shù)的信息。

語法結(jié)構(gòu):

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存儲函數(shù)名' [AND ROUTINE_TYPE = 'FUNCTION '];

說明: 如果在MySQL數(shù)據(jù)庫中存在存儲過程和函數(shù)名稱相同的情況,最好指定ROUTINE_TYPE查詢條件來指明查詢的是存儲過程還是函數(shù)。

5、修改存儲函數(shù)

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

ALTER FUNCTION 存儲函數(shù)名;

6、對比存儲函數(shù)和存儲過程

關(guān)鍵字 調(diào)用語法 返回值 應(yīng)用場景
存儲過程 PROCEDURE CALL 存儲過程() 理解為有0個或多個 一般用于更新
存儲函數(shù) FUNCTION SELECT 函數(shù)() 只能是一個 一般用于查詢結(jié)果為一個值并返回時

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

7、練習(xí)題加強

#前提準(zhǔn)備
CREATE TABLE employees
AS
SELECT * FROM atguigudb.`employees`; 
CREATE TABLE 
departments AS
SELECT * FROM atguigudb.`departments`; 
#1. 創(chuàng)建函數(shù)get_count(),返回公司的員工個數(shù) #有參有返回 
SET GLOBAL log_bin_trust_function_creators = 1;
DELIMITER $
CREATE FUNCTION get_count()
RETURNS INT
BEGIN
	RETURN (SELECT COUNT(*) FROM employees);
END $
DELIMITER ;

注意:

自己在創(chuàng)建存儲函數(shù)中報錯“you might want to use the less safe log_bin_trust_function_creators variable”,然后查看筆記發(fā)現(xiàn)解決此問題的一種方式就是執(zhí)行SET GLOBAL log_bin_trust_function_creators = 1;SQL語句

#2. 創(chuàng)建函數(shù)ename_salary(),根據(jù)員工id,返回它的工資 
#查詢表結(jié)構(gòu)來看要返回數(shù)據(jù)的類型
DESC employees;
DELIMITER $
CREATE FUNCTION ename_salary(id INT)
RETURNS DOUBLE(8,2)
BEGIN
	RETURN (SELECT salary FROM employees WHERE employee_id = id);
END $
DELIMITER ;
#查詢結(jié)果
SELECT ename_salary(100);

愛在結(jié)尾:自己應(yīng)該學(xué)會:1、會使用創(chuàng)建存儲函數(shù)的基本語法 ; 2、學(xué)會調(diào)用存儲函數(shù); 3、知道存儲函數(shù)與存儲過程的相同和不同點

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

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部