關(guān)于MySQL的存儲函數(shù)(自定義函數(shù))的定義和使用方法詳解
存儲函數(shù)
什么是存儲函數(shù): 封裝一段sql代碼,完成一種特定的功能,返回結(jié)果。
存儲函數(shù)的語法:
create function 函數(shù)([函數(shù)參數(shù)[,….]]) Returns 返回類型 Begin If( Return (返回的數(shù)據(jù)) Else Return (返回的數(shù)據(jù)) end if; end;
例如: create function count_news(hits int) returns int
與存儲過程返回參數(shù)不同的是存儲函數(shù)在定義時沒用直接聲明哪個變量是返回參數(shù),而只是使用了returns聲明了返回參數(shù)所屬的數(shù)據(jù)類型,返回參數(shù)是在函數(shù)體中使用return返回要返回的數(shù)據(jù)變量的形式來表示的。這就需要注意的是:
存儲函數(shù)只支持輸入?yún)?shù),并且輸入?yún)?shù)前沒有IN或INOUT.
存儲函數(shù)中的限制
流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
變量聲明(DECLARE)以及指派(SET)是合法的.
允許條件聲明.
異常處理聲明也是允許的.
但是在這里要記住函數(shù)有受限條件:不能在函數(shù)中訪問表.因此在函數(shù)中使用以下語句是非法的。
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE
DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL
LOCK OPTIMIZE REPAIR REPLACE REVOKE
ROLLBACK SAVEPOINT 'SELECT FROM table'
'SET system variable' 'SET TRANSACTION'
SHOW 'START TRANSACTION' TRUNCATE UPDATE
存儲函數(shù)與存儲過程的區(qū)別
一、 存儲函數(shù)有且只有一個返回值,而存儲過程不能有返回值。
二、 函數(shù)只能有輸入?yún)?shù),而且不能帶in, 而存儲過程可以有多個in,out,inout參數(shù)。
三、 存儲過程中的語句功能更強大,存儲過程可以實現(xiàn)很復(fù)雜的業(yè)務(wù)邏輯,而函數(shù)有很多限制,如不能在函數(shù)中使用insert,update,delete,create等語句;存儲函數(shù)只完成查詢的工作,可接受輸入?yún)?shù)并返回一個結(jié)果,也就是函數(shù)實現(xiàn)的功能針對性比較強。
四、 存儲過程可以調(diào)用存儲函數(shù)。但函數(shù)不能調(diào)用存儲過程。
五、 存儲過程一般是作為一個獨立的部分來執(zhí)行(call調(diào)用)。而函數(shù)可以作為查詢語句的一個部分來調(diào)用。
實例1:
|
Id |
Name |
|
phone |
|
1 |
秦云 |
10102800 |
13500000 |
|
2 |
在路上 |
10378 |
13600000 |
|
3 |
LEO |
10000 |
13900000 |
|
Id |
Name |
上機時間 |
管理員 |
|
1 |
秦云 |
2004-1-1 |
李大偉 |
|
2 |
秦云 |
2005-1-1 |
馬化騰 |
|
3 |
在路上 |
2005-1-1 |
馬化騰 |
|
4 |
秦云 |
2005-1-1 |
李大偉 |
|
5 |
在路上 |
2005-1-1 |
李大偉 |
實現(xiàn)目的:
從表1中取所有人員列表,從表2中取上機次數(shù)和管理員.
上機人員名單 上機次數(shù) 管理員
秦云 3 李大偉,馬化騰,李大偉
在路上 2 馬化騰,李大偉
LEO 0
相關(guān)文章
SQL中row_number()?over(partition?by)的用法說明
這篇文章主要介紹了SQL中row_number()?over(partition?by)的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Mysql賬號管理與引擎相關(guān)功能實現(xiàn)流程
Mysql中的每一種技術(shù)都使用不同的存儲機制、索引技巧、鎖定水平、并且最終提供廣泛的不同功能和能力。通過選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善應(yīng)用的整體功能。這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲引擎2022-10-10
mysql 8.0.22 zip壓縮包版(免安裝)下載、安裝配置步驟詳解
這篇文章主要介紹了mysql 8.0.22 zip壓縮包版(免安裝)下載、安裝配置步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
SQL實現(xiàn)LeetCode(178.分數(shù)排行)
這篇文章主要介紹了SQL實現(xiàn)LeetCode(178.分數(shù)排行),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
Mysql數(shù)據(jù)庫亂碼問題的對應(yīng)方式
今天小編就為大家分享一篇關(guān)于Mysql數(shù)據(jù)庫亂碼問題的對應(yīng)方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

