电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:239日期:2023-05-08 10:17:44
目錄
  • 初識存儲過程
  • 存儲過程語法
  • 存儲過程調(diào)用
  • 存儲函數(shù)的使用
    • 語法
    • 函數(shù)的調(diào)用
    • 對比存儲函數(shù)和存儲過程

初識存儲過程

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

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

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

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

  • 存儲過程的分類
    存儲過程的參數(shù)類型可以是IN,OUT,INOUT,根據(jù)這樣可以分類
    • ①沒有參數(shù)(無參無返回)
    • ②僅僅帶IN類型(有參數(shù)無返回)
    • ③僅僅帶OUT類型(無參數(shù)有返回)
    • ④既有IN,又有OUT(有參有返回)
    • ⑤帶INOUT(有參有返回)

IN,OUT,INOUT都可以在一個存儲過程中帶多個

存儲過程語法

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

類似于Java的語法

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

接下來對參數(shù)類型前面的IN,OUT,INOUT進行說明

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

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

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

需要注意的地方:

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

存儲過程調(diào)用

準備工作

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

無參無返回

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

OUT類型

IN類型

帶IN和OUT

帶INOUT

存儲函數(shù)的使用

語法

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

說明:

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

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

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

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

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

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

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

注意:

若在創(chuàng)建存儲函數(shù)中報錯“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;

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

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

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

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

標簽: MySQL
相關(guān)文章:
主站蜘蛛池模板: 许昌奥仕达自动化设备有限公司| 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 成都思迪机电技术研究所-四川成都思迪编码器 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 14米地磅厂家价价格,150吨地磅厂家价格-百科 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 新疆系统集成_新疆系统集成公司_系统集成项目-新疆利成科技 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | LNG鹤管_内浮盘价格,上装鹤管,装车撬厂家-连云港赛威特机械 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 渗透仪-直剪仪-三轴仪|苏州昱创百科 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 |