1、首先先創(chuàng)建一個存儲過程,代碼如圖,存儲過程主要的功能是為表JingYan插入新的數(shù)據(jù)。

策勒網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
2、執(zhí)行這幾行代碼,看到執(zhí)行成功,數(shù)據(jù)庫里現(xiàn)在已經(jīng)有存儲過程sp_JY。
3、先看下JingYan表里目前的數(shù)組,如圖,只有三行數(shù)據(jù)。
4、在mysql里,調(diào)用存儲過程,只需要用call關(guān)鍵字,帶上存儲過程的名稱就行了,當然有參數(shù)時,需要帶個參數(shù)。
5、執(zhí)行了這個存儲過程的調(diào)用之后,再看下JingYan表里的數(shù)據(jù),可以看到現(xiàn)在的數(shù)據(jù)已經(jīng)是四條了,說明調(diào)用存儲過程成功插入了一條新的數(shù)據(jù)。
6、再添加一個存儲過程,該存儲過程用select語句,返回表數(shù)據(jù)。
7、調(diào)用查詢新的存儲過程,可以看到結(jié)果里也是返回表數(shù)據(jù)。
查詢數(shù)據(jù)庫中的存儲過程和函數(shù)
select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存儲過程
select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION' //函數(shù)
show procedure status; //存儲過程
show function status; //函數(shù)
查看存儲過程或函數(shù)的創(chuàng)建代碼
show create procedure proc_name;
show create function func_name;
查看視圖
SELECT * from information_schema.VIEWS //視圖
SELECT * from information_schema.TABLES //表
查看觸發(fā)器
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G
1、函數(shù)必須指定返回值,且參數(shù)默認為IN類型。
2、存儲過程沒返回值,參數(shù)可以是 IN,OUT,IN OUT類型,有的人可能會理解成OUT 也算是返回值。
3、調(diào)用方式:函數(shù) select my_fun() ;過程 call my_pro( ) ;
4、DEMO
? create procedure用來創(chuàng)建 存儲過程 ,create function用來創(chuàng)建 函數(shù)
? Delimiter命令是改變語句的結(jié)束符 ,MySQL默認的結(jié)束符為;號,由于procedure和function中的;號并不代表創(chuàng)建的結(jié)束,所以要替換成另外的結(jié)束符以便表示創(chuàng)建的結(jié)束
? rontine_body子句可以包含一個簡單的SQL語句,也可以包含多個SQL語句, 通過begin…end將這多個SQL語句 包含在一起
? MySQL存儲過程和函數(shù)中也可以包含類似create和drop等DDL語句
? comment子句用來寫入對存儲過程和函數(shù)的注釋
? Language子句用來表示此存儲過程和函數(shù)的創(chuàng)建語言
? 存儲過程和函數(shù)被標注為deterministic表明當輸入相同的參數(shù)是會返回相同的結(jié)果,反之如果是not deterministic則表示相同參數(shù)不會是相同結(jié)果,默認是not deterministic
? 相關(guān)屬性短語只有咨詢含義,并不是強制性的約束
? Drop procedure/function語句用來 刪除指定名稱的存儲過程或函數(shù)
? Begin…end語句通常出現(xiàn)在存儲過程、函數(shù)和觸發(fā)器中,其中 可以包含一個或多個語句 ,每個語句用;號隔開
? 標簽label可以加在begin…end語句以及l(fā)oop, repeat和while語句
? 語句中通過iterate和leave來控制流程,iterate表示返回指定標簽位置,leave表示跳出標簽
? Declare語句通常用來聲明本地變量、游標、條件或者handler
? Declare語句只允許出現(xiàn)在begin … end語句中而且必須出現(xiàn)在第一行
? Declare的順序也有要求,通常是先聲明本地變量,再是游標,然后是條件和handler
? 本地變量可以通過declare語句進行聲明
? 聲明后的變量可以通過select … into var_list進行賦值,或者通過set語句賦值,或者通過定義游標并使用fetch … into var_list賦值
? 通過declare聲明變量方法:
? MySQL支持if,case,iterate,leave,loop,while,repeat語句作為存儲過程和函數(shù)中的 流程控制語句 ,另外return語句也是函數(shù)中的特定流程控制語句
? Case語句在存儲過程或函數(shù)中表明了 復(fù)雜的條件選擇語句
? IF語句在存儲過程或函數(shù)中表明了 基礎(chǔ)的條件選擇語句
其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我們開啟了 bin-log, 我們就必須為我們的 function 指定一個參數(shù)。
在 MySQL 中創(chuàng)建函數(shù)時出現(xiàn)這種錯誤的解決方法:
set global log_bin_trust_function_creators=TRUE;
? Iterate語句 僅出現(xiàn)在loop,repeat,while循環(huán)語句中,其含義表示重新開始此循環(huán)
? Leave語句表明 退出指定標簽的流程控制語句塊
? 通常會用在begin…end,以及l(fā)oop,repeat,while的循環(huán)語句中
? Loop語句是存儲過程或函數(shù)中表達 循環(huán)執(zhí)行 的一種方式
? repeat語句是存儲過程或函數(shù)中表達 循環(huán)執(zhí)行 的一種方式
? while語句是存儲過程或函數(shù)中表達 循環(huán)執(zhí)行 的一種方式
? Return語句用在 函數(shù)中,用來終結(jié)函數(shù)的執(zhí)行并將指定值返回給調(diào)用者
? Cursor游標用來 聲明一個數(shù)據(jù)集
? 游標的聲明必須在變量和條件聲明之后,在handler聲明之前
? Cursor close語句用來 關(guān)閉之前打開的游標
? Cursor declare語句用來聲明一個游標和指定游標對應(yīng)的數(shù)據(jù)集合, 通常數(shù)據(jù)集合是一個select語句
? Cursor fetch語句用來獲取游標指定數(shù)據(jù)集的 下一行數(shù)據(jù) 并將各個字段值賦予后面的變量
? Open cursor語句用來打開一個之前已經(jīng) 聲明好的游標
? Declare condition語句命名 特定的錯誤條件 ,而該特定錯誤可以在declare…h(huán)andler中指定 處理方法
? 比如在MySQL中1051error code表示的是unknown table的錯誤,如果要對這
個錯誤做特殊處理,可以用三種方法:
? Declare handler語句用來聲明一個handler來處理一個或多個特殊條件,當其中的某個條件滿足時則觸發(fā)其中的statement語句執(zhí)行
? Statement可以是一個簡單SQL語句,也可以是begin…end組成的多個語句
? Handler_action子句聲明當執(zhí)行完statement語句之后應(yīng)該怎么辦
Condition_value的值有以下幾種:
? 當condition發(fā)生但沒有聲明handler時,則存儲過程和函數(shù)依照如下規(guī)則處理
? create trigger語句用來創(chuàng)建一個觸發(fā)器,觸發(fā)器的作用是當表上有對應(yīng)SQL語句發(fā)生時,則觸發(fā)執(zhí)行
? 觸發(fā)器創(chuàng)建時需要 指定對應(yīng)的表名 tbl_name
? Definer關(guān)鍵詞用來指定trigger的安全環(huán)境
? Trigger_time指定觸發(fā)器的執(zhí)行時間,BEFORE和AFTER指定觸發(fā)器在表中的 每行數(shù)據(jù)修改前或者后 執(zhí)行
? Trigger_event指定觸發(fā)該觸發(fā)器的具體 事件
? INSERT當新的一行數(shù)據(jù)插入表中時觸發(fā),比如通過執(zhí)行insert,load data,replace語句插入新數(shù)據(jù)
? UPDATE當表的一行數(shù)據(jù)被修改時觸發(fā),比如執(zhí)行update語句時
? DELETE當表的一行數(shù)據(jù)被刪除時觸發(fā),比如執(zhí)行delete,replace語句時
? 當執(zhí)行insert into … on duplicate key update語句時,當碰到重復(fù)行執(zhí)行update時,則觸發(fā)update下的觸發(fā)器
? 從5.7.2版本開始,可以創(chuàng)建具有相同trigger_time和trigger_event的同一個表上的多個觸發(fā)器,默認情況下按照創(chuàng)建的時間依次執(zhí)行,通過 指定FOLLOWS/PRECEDES改變執(zhí)行順序 ,即FOLLOWS時表示新創(chuàng)建的觸發(fā)器后執(zhí)行,PRECEDES則表示新觸發(fā)器先執(zhí)行
? Trigger_body表示觸發(fā)器觸發(fā)之后要執(zhí)行的一個或多個語句,在內(nèi)部可以引用涉及表的字段, OLD.col_name表示行數(shù)據(jù)被修改或刪除之前的字段數(shù)據(jù),NEW.col_name表示行數(shù)據(jù)被插入或修改之后的字段數(shù)據(jù)
? Drop trigger語句用來 刪除一個觸發(fā)器
? If exists短語用來避免刪除不存在的觸發(fā)器時引發(fā)報錯
? 當你執(zhí)行drop table時,表上的觸發(fā)器也被drop掉了
本文名稱:mysql怎么查看存儲函數(shù) mysql怎么查詢數(shù)據(jù)庫內(nèi)存
標題路徑:http://chinadenli.net/article38/hjidsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、標簽優(yōu)化、網(wǎng)站導(dǎo)航、Google、小程序開發(fā)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)