欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql中存儲過程和存儲函數(shù)指的是什么

小編給大家分享一下MySQL中存儲過程和存儲函數(shù)指的是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián),為您提供成都網(wǎng)站建設網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設計,對服務成都工商代辦等多個行業(yè)擁有豐富的網(wǎng)站建設及推廣經(jīng)驗。成都創(chuàng)新互聯(lián)網(wǎng)站建設公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責任!

在mysql中,存儲過程和存儲函數(shù)都是數(shù)據(jù)庫中定義的一些SQL語句的集合。其中,存儲函數(shù)可以通過return語句返回函數(shù)值,主要用于計算并返回一個值;而存儲過程沒有直接返回值,主要用于執(zhí)行操作。

mysql中的存儲過程

編寫存儲過程并不是件簡單的事情,但是使用存儲過程可以簡化操作,且減少冗余的操作步驟,同時,還可以減少操作過程中的失誤,提高效率,因此應該盡可能的學會使用存儲過程。

下面主要介紹如何創(chuàng)建存儲過程。

可以使用 CREATE PROCEDURE 語句創(chuàng)建存儲過程,語法格式如下:

CREATE PROCEDURE <過程名> ( [過程參數(shù)[,…] ] ) <過程體>

[過程參數(shù)[,…] ] 格式

[ IN | OUT | INOUT ] <參數(shù)名> <類型>

語法說明如下:

1) 過程名

存儲過程的名稱,默認在當前數(shù)據(jù)庫中創(chuàng)建。若需要在特定數(shù)據(jù)庫中創(chuàng)建存儲過程,則要在名稱前面加上數(shù)據(jù)庫的名稱,即 db_name.sp_name。

需要注意的是,名稱應當盡量避免選取與 MySQL 內(nèi)置函數(shù)相同的名稱,否則會發(fā)生錯誤。

2) 過程參數(shù)

存儲過程的參數(shù)列表。其中,<參數(shù)名>為參數(shù)名,<類型>為參數(shù)的類型(可以是任何有效的 MySQL 數(shù)據(jù)類型)。當有多個參數(shù)時,參數(shù)列表中彼此間用逗號分隔。存儲過程可以沒有參數(shù)(此時存儲過程的名稱后仍需加上一對括號),也可以有 1 個或多個參數(shù)。

MySQL 存儲過程支持三種類型的參數(shù),即輸入?yún)?shù)、輸出參數(shù)和輸入/輸出參數(shù),分別用 IN、OUT 和 INOUT 三個關鍵字標識。其中,輸入?yún)?shù)可以傳遞給一個存儲過程,輸出參數(shù)用于存儲過程需要返回一個操作結果的情形,而輸入/輸出參數(shù)既可以充當輸入?yún)?shù)也可以充當輸出參數(shù)。

需要注意的是,參數(shù)的取名不要與數(shù)據(jù)表的列名相同,否則盡管不會返回出錯信息,但是存儲過程的 SQL 語句會將參數(shù)名看作列名,從而引發(fā)不可預知的結果。

3) 過程體

存儲過程的主體部分,也稱為存儲過程體,包含在過程調(diào)用的時候必須執(zhí)行的 SQL 語句。這個部分以關鍵字 BEGIN 開始,以關鍵字 END 結束。若存儲過程體中只有一條 SQL 語句,則可以省略 BEGIN-END 標志。

在存儲過程的創(chuàng)建中,經(jīng)常會用到一個十分重要的 MySQL 命令,即 DELIMITER 命令,特別是對于通過命令行的方式來操作 MySQL 數(shù)據(jù)庫的使用者,更是要學會使用該命令。

在 MySQL 中,服務器處理 SQL 語句默認是以分號作為語句結束標志的。然而,在創(chuàng)建存儲過程時,存儲過程體可能包含有多條 SQL 語句,這些 SQL 語句如果仍以分號作為語句結束符,那么 MySQL 服務器在處理時會以遇到的第一條 SQL 語句結尾處的分號作為整個程序的結束符,而不再去處理存儲過程體中后面的 SQL 語句,這樣顯然不行。

為解決以上問題,通常使用 DELIMITER 命令將結束命令修改為其他字符。語法格式如下:

DELIMITER $$

語法說明如下:

  • $$ 是用戶定義的結束符,通常這個符號可以是一些特殊的符號,如兩個“?”或兩個“¥”等。

  • 當使用 DELIMITER 命令時,應該避免使用反斜杠“\”字符,因為它是 MySQL 的轉義字符。

在 MySQL 命令行客戶端輸入如下 SQL 語句。

mysql > DELIMITER ??

成功執(zhí)行這條 SQL 語句后,任何命令、語句或程序的結束標志就換為兩個問號“??”了。

若希望換回默認的分號“;”作為結束標志,則在 MySQL 命令行客戶端輸入下列語句即可:

mysql > DELIMITER ;

注意:DELIMITER 和分號“;”之間一定要有一個空格。在創(chuàng)建存儲過程時,必須具有 CREATE ROUTINE 權限。

mysql中的存儲函數(shù)

在 MySQL 中,使用 CREATE FUNCTION 語句來創(chuàng)建存儲函數(shù),其語法形式如下:

CREATE FUNCTION sp_name ([func_parameter[...]])
RETURNS type
[characteristic ...] routine_body

其中:

  • sp_name 參數(shù):表示存儲函數(shù)的名稱;

  • func_parameter:表示存儲函數(shù)的參數(shù)列表;

  • RETURNS type:指定返回值的類型;

  • characteristic 參數(shù):指定存儲函數(shù)的特性,該參數(shù)的取值與存儲過程是一樣的;

  • routine_body 參數(shù):表示 SQL 代碼的內(nèi)容,可以用 BEGIN...END 來標示 SQL 代碼的開始和結束。

注意:在具體創(chuàng)建函數(shù)時,函數(shù)名不能與已經(jīng)存在的函數(shù)名重名。除了上述要求外,推薦函數(shù)名命名(標識符)為 function_xxx 或者 func_xxx。

func_parameter 可以由多個參數(shù)組成,其中每個參數(shù)由參數(shù)名稱和參數(shù)類型組成,其形式如下:
[IN | OUT | INOUT] param_name type;

其中:

  • IN 表示輸入?yún)?shù),OUT 表示輸出參數(shù),INOUT 表示既可以輸入也可以輸出;

  • param_name 參數(shù)是存儲函數(shù)的參數(shù)名稱;

  • type 參數(shù)指定存儲函數(shù)的參數(shù)類型,該類型可以是 MySQL 數(shù)據(jù)庫的任意數(shù)據(jù)類型。

例 1

使用 CREATE FUNCTION 創(chuàng)建查詢 tb_student 表中某個學生姓名的函數(shù),SQL 語句和執(zhí)行過程如下:

mysql> USE test;
Database changed
mysql> DELIMITER //
mysql> CREATE FUNCTION func_student(id INT(11))
    -> RETURNS VARCHAR(20)
    -> COMMENT '查詢某個學生的姓名'
    -> BEGIN
    -> RETURN(SELECT name FROM tb_student WHERE tb_student.id = id);
    -> END //
Query OK, 0 rows affected (0.10 sec)
mysql> DELIMITER ;

上述代碼中,創(chuàng)建了 func_student 函數(shù),該函數(shù)擁有一個類型為 INT(11) 的參數(shù) id,返回值為 VARCHAR(20) 類型。SELECT 語句從 tb_student 表中查詢 id 字段值等于所傳入?yún)?shù) id 值的記錄,同時返回該條記錄的 name 字段值。

創(chuàng)建函數(shù)與創(chuàng)建存儲過程一樣,需要通過命令 DELIMITER // 將 SQL 語句的結束符由“;”修改為“//”,最后通過命令 DELIMITER ; 將結束符號修改成 SQL 語句中默認的結束符號。

如果在存儲函數(shù)中的 RETURN 語句返回一個類型不同于函數(shù)的 RETURNS 子句中指定類型的值,返回值將被強制為恰當?shù)念愋汀1热纾绻粋€函數(shù)返回一個 ENUM 或 SET 值,但是 RETURN 語句返回一個整數(shù),對于 SET 成員集的相應的 ENUM 成員,從函數(shù)返回的值是字符串。

拓展閱讀

由于存儲函數(shù)和存儲過程的查看、修改、刪除等操作幾乎相同,所以我們不再詳細講解如何操作存儲函數(shù)了。

查看存儲函數(shù)的語法如下:

SHOW FUNCTION STATUS LIKE 存儲函數(shù)名;
SHOW CREATE FUNCTION 存儲函數(shù)名;
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存儲函數(shù)名;

可以發(fā)現(xiàn),操作存儲函數(shù)和操作存儲過程不同的是將 PROCEDURE 替換成了 FUNCTION。同樣,修改存儲函數(shù)的語法如下:

ALTER FUNCTION 存儲函數(shù)名 [ 特征 ... ]

存儲函數(shù)的特征與存儲過程的基本一樣。

看完了這篇文章,相信你對mysql中存儲過程和存儲函數(shù)指的是什么有了一定的了解,想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

新聞標題:mysql中存儲過程和存儲函數(shù)指的是什么
文章起源:http://www.chinadenli.net/article38/iejepp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃定制網(wǎng)站網(wǎng)頁設計公司手機網(wǎng)站建設自適應網(wǎng)站關鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設