久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

關(guān)于MySQL的存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)

瀏覽:243日期:2023-05-08 10:17:44
目錄
  • 初識(shí)存儲(chǔ)過(guò)程
  • 存儲(chǔ)過(guò)程語(yǔ)法
  • 存儲(chǔ)過(guò)程調(diào)用
  • 存儲(chǔ)函數(shù)的使用
    • 語(yǔ)法
    • 函數(shù)的調(diào)用
    • 對(duì)比存儲(chǔ)函數(shù)和存儲(chǔ)過(guò)程

初識(shí)存儲(chǔ)過(guò)程

  • 理解:
    • 含義: 存儲(chǔ)過(guò)程(Stored Procedure)是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 語(yǔ)句集(這些SQL語(yǔ)句已經(jīng)編譯過(guò)了),它存儲(chǔ)在數(shù)據(jù)庫(kù)中,一次編譯后永久有效,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。
    • 執(zhí)行過(guò)程:存儲(chǔ)過(guò)程預(yù)先存儲(chǔ)在MySQL服務(wù)器,當(dāng)需要執(zhí)行的時(shí)候,客戶端向服務(wù)器端發(fā)送執(zhí)行的命令,服務(wù)器端就可以把預(yù)先存儲(chǔ)好的這一系列sql語(yǔ)句全部執(zhí)行。
  • 好處
    • 簡(jiǎn)化操作,提高sql語(yǔ)句復(fù)用性
    • 減少網(wǎng)絡(luò)傳輸量(客戶端不需要把所有的SQL語(yǔ)句通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器端)
    • 減少sql語(yǔ)句暴露在網(wǎng)上的風(fēng)險(xiǎn),提高數(shù)據(jù)查詢的安全性

存儲(chǔ)過(guò)程和視圖與函數(shù)的對(duì)比

存儲(chǔ)過(guò)程可以直接操作底層數(shù)據(jù)表,視圖是虛擬表,存儲(chǔ)過(guò)程一旦創(chuàng)建出來(lái),我們直接通過(guò)存儲(chǔ)過(guò)程名調(diào)用就可以了,就像用函數(shù)一樣,相對(duì)于函數(shù),存儲(chǔ)過(guò)程是沒(méi)有返回值的

接下來(lái)看看存儲(chǔ)過(guò)程的分類(lèi),現(xiàn)在不懂沒(méi)關(guān)系,等文章后面內(nèi)容看完再回過(guò)來(lái)看,其實(shí)分類(lèi)和函數(shù)的分類(lèi)差不多,就是根據(jù)有無(wú)參數(shù)和有無(wú)返回值來(lái)劃分。

  • 存儲(chǔ)過(guò)程的分類(lèi)
    存儲(chǔ)過(guò)程的參數(shù)類(lèi)型可以是IN,OUT,INOUT,根據(jù)這樣可以分類(lèi)
    • ①?zèng)]有參數(shù)(無(wú)參無(wú)返回)
    • ②僅僅帶IN類(lèi)型(有參數(shù)無(wú)返回)
    • ③僅僅帶OUT類(lèi)型(無(wú)參數(shù)有返回)
    • ④既有IN,又有OUT(有參有返回)
    • ⑤帶INOUT(有參有返回)

IN,OUT,INOUT都可以在一個(gè)存儲(chǔ)過(guò)程中帶多個(gè)

存儲(chǔ)過(guò)程語(yǔ)法

CREATE PROCEDURE 存儲(chǔ)過(guò)程名(IN|OUT|INOUT 參數(shù)名 參數(shù)類(lèi)型,...)[characteristics ...]BEGIN	存儲(chǔ)過(guò)程體END

類(lèi)似于Java的語(yǔ)法

修飾符 返回類(lèi)型 方法名(參數(shù)類(lèi)型 參數(shù)名,...){	方法體;}

接下來(lái)對(duì)參數(shù)類(lèi)型前面的IN,OUT,INOUT進(jìn)行說(shuō)明

  • IN:當(dāng)前參數(shù)是輸入?yún)?shù),如果沒(méi)有定義參數(shù)的話,默認(rèn)就是參數(shù)類(lèi)型是IN
  • OUT:輸出參數(shù)
  • INOUT:可以表示為輸入?yún)?shù),也可以是輸出參數(shù)

characteristics表示創(chuàng)建存儲(chǔ)過(guò)程時(shí)指定的對(duì)存儲(chǔ)過(guò)程的約束條件,其取值信息如下:

LANGUAGE SQL| [NOT] DETERMINISTIC| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }| COMMENT "string"
  • LANGUAGE SQL:說(shuō)明存儲(chǔ)過(guò)程執(zhí)行體是由SQL語(yǔ)句組成的,當(dāng)前系統(tǒng)支持的語(yǔ)言為SQL。
  • [NOT] DETERMINISTIC:指明存儲(chǔ)過(guò)程執(zhí)行的結(jié)果是否確定。DETERMINISTIC表示結(jié)果是確定的。每次執(zhí)行存儲(chǔ)過(guò)程時(shí),相同的輸入會(huì)得到相同的輸出。NOT DETERMINISTIC表示結(jié)果是不確定的,相同的輸入可能得到不同的輸出。如果沒(méi)有指定任意一個(gè)值,默認(rèn)為NOT DETERMINISTIC。
  • { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL語(yǔ)句的限制。
    • CONTAINS SQL表示當(dāng)前存儲(chǔ)過(guò)程的子程序包含SQL語(yǔ)句,但是并不包含讀寫(xiě)數(shù)據(jù)的SQL語(yǔ)句;
    • NO SQL表示當(dāng)前存儲(chǔ)過(guò)程的子程序中不包含任何SQL語(yǔ)句;
    • READS SQL DATA表示當(dāng)前存儲(chǔ)過(guò)程的子程序中包含讀數(shù)據(jù)的SQL語(yǔ)句;
    • MODIFIES SQL DATA表示當(dāng)前存儲(chǔ)過(guò)程的子程序中包含寫(xiě)數(shù)據(jù)的SQL語(yǔ)句。
    • 默認(rèn)情況下,系統(tǒng)會(huì)指定為CONTAINS SQL。
  • SQL SECURITY { DEFINER | INVOKER }:執(zhí)行當(dāng)前存儲(chǔ)過(guò)程的權(quán)限,即指明哪些用戶能夠執(zhí)行當(dāng)前存儲(chǔ)過(guò)程。
    • DEFINER表示只有當(dāng)前存儲(chǔ)過(guò)程的創(chuàng)建者或者定義者才能執(zhí)行當(dāng)前存儲(chǔ)過(guò)程;
    • INVOKER表示擁有當(dāng)前存儲(chǔ)過(guò)程的訪問(wèn)權(quán)限的用戶能夠執(zhí)行當(dāng)前存儲(chǔ)過(guò)程。
    • 如果沒(méi)有設(shè)置相關(guān)的值,則MySQL默認(rèn)指定值為DEFINER。
  • COMMENT 'string':注釋信息,可以用來(lái)描述存儲(chǔ)過(guò)程。

需要注意的地方:

  • mysql默認(rèn)以;作為語(yǔ)句結(jié)束的標(biāo)識(shí)
  • 為了避免與存儲(chǔ)過(guò)程中SQL語(yǔ)句結(jié)束符相沖突,需要使用DELIMITER改變存儲(chǔ)過(guò)程的結(jié)束符。
  • 存儲(chǔ)過(guò)程定義完畢之后再使用“DELIMITER ;”恢復(fù)默認(rèn)結(jié)束符。DELIMITER也可以指定其他符號(hào)作為結(jié)束符。
DELIMITER $CREATE PROCEDURE 存儲(chǔ)過(guò)程名(IN|OUT|INOUT 參數(shù)名  參數(shù)類(lèi)型,...)[characteristics ...]BEGIN	sql語(yǔ)句1;	sql語(yǔ)句2;END $

存儲(chǔ)過(guò)程調(diào)用

準(zhǔn)備工作

 -- 準(zhǔn)備工作,創(chuàng)建新數(shù)據(jù)庫(kù) create database  db15;use db15;create table empsas select * from atguigudb.employees;create table departmentsas    select * from atguigudb.departments;select * from emps;

無(wú)參無(wú)返回

存儲(chǔ)過(guò)程的調(diào)用,用call+存儲(chǔ)過(guò)程名

OUT類(lèi)型

IN類(lèi)型

帶IN和OUT

帶INOUT

存儲(chǔ)函數(shù)的使用

語(yǔ)法

CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類(lèi)型,...) RETURNS 返回值類(lèi)型[characteristics ...]BEGIN	函數(shù)體   #函數(shù)體中肯定有 RETURN 語(yǔ)句END

說(shuō)明:

1、參數(shù)列表:指定參數(shù)為IN、OUT或INOUT只對(duì)PROCEDURE是合法的,F(xiàn)UNCTION中總是默認(rèn)為IN參數(shù)。

2、RETURNS type 語(yǔ)句表示函數(shù)返回?cái)?shù)據(jù)的類(lèi)型;

RETURNS子句只能對(duì)FUNCTION做指定,對(duì)函數(shù)而言這是強(qiáng)制的。它用來(lái)指定函數(shù)的返回類(lèi)型,而且函數(shù)體必須包含一個(gè)RETURN value語(yǔ)句。

3、characteristic 創(chuàng)建函數(shù)時(shí)指定的對(duì)函數(shù)的約束。取值與創(chuàng)建存儲(chǔ)過(guò)程時(shí)相同,這里不再贅述。

4、函數(shù)體也可以用BEGIN…END來(lái)表示SQL代碼的開(kāi)始和結(jié)束。如果函數(shù)體只有一條語(yǔ)句,也可以省略BEGIN…END。

函數(shù)的調(diào)用

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

注意:

若在創(chuàng)建存儲(chǔ)函數(shù)中報(bào)錯(cuò)“you might want to use the less safe log_bin_trust_function_creators variable”,有兩種處理方法:

  • 方式1:加上必要的函數(shù)特性“[NOT] DETERMINISTIC”和“{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}”

  • 方式2:

SET GLOBAL log_bin_trust_function_creators = 1;

對(duì)比存儲(chǔ)函數(shù)和存儲(chǔ)過(guò)程

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

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

到此這篇關(guān)于關(guān)于MySQL的存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)的文章就介紹到這了,更多相關(guān)MySQL存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: MySQL
相關(guān)文章:
主站蜘蛛池模板: 欧美在线综合 | 色婷婷国产精品免费网站 | 不卡一区 | 欧美国产一区二区 | 国产成人精品一区二区三区视频 | 成人高清在线观看 | 91精品国产91久久久久久吃药 | www.久久久 | 久久九九| 国产一区不卡视频 | 99精品欧美一区二区蜜桃免费 | 国产精品一区二区在线 | 欧美精品在欧美一区二区少妇 | 好色视频在线观看 | 国产中文字幕在线观看 | 久久久久久麻豆 | 国产精品二区一区二区aⅴ污介绍 | 国产综合久久久久久鬼色 | 91精品国产综合久久久久久漫画 | 欧美一区二区三区精品 | 日韩中文字幕在线 | 日韩福利在线观看 | 国产精品成人久久久久 | 亚洲免费av在线 | 国产精品美女久久 | 欧美va天堂| 亚州综合一区 | 欧美日韩在线一区二区三区 | 中文字幕亚洲一区 | 成人免费视频网站 | 中文字幕亚洲区 | 国产激情偷乱视频一区二区三区 | 国产一级片 | 日本亚洲欧美 | 国产一区免费视频 | 国产精品视频 | 91一区二区| 一级片在线观看网站 | 日韩精品视频在线播放 | 欧美高清视频一区 | 毛片在线网站 |