在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

整理剖析,只為教你創(chuàng)建MySQL存儲(chǔ)過程

如意 ? 來源:百家號(hào) ? 作者: 程序員碼農(nóng)范兒 ? 2020-07-02 17:11 ? 次閱讀

簡單地說,存儲(chǔ)過程就是一條或者多條SQL語句的集合,可視為批文件,但是其作用不僅限于批處理。本篇主要介紹如何創(chuàng)建存儲(chǔ)過程和存儲(chǔ)函數(shù)以及變量的使用,如何調(diào)用、查看、修改、刪除存儲(chǔ)過程和存儲(chǔ)函數(shù)等。

存儲(chǔ)程序可以分為存儲(chǔ)過程和函數(shù),MySQL 中創(chuàng)建存儲(chǔ)過程和函數(shù)使用的語句分別是:CREATE PROCEDURE和CREATE FUNCTION。使用CALL語句來調(diào)用存儲(chǔ)過程,只能用輸出變量返回值。函數(shù)可以從語句外調(diào)用(即通過引用函數(shù)名),也能返回標(biāo)量值。存儲(chǔ)過程也可以調(diào)用其他存儲(chǔ)過程。

創(chuàng)建存儲(chǔ)過程

創(chuàng)建存儲(chǔ)過程,需要使用CREATE PROCEDURE語句,基本語法格式如下:

CREATE PROCEDURE sp name ( [ proc parameter])

[ characteristics…] routine_ body

CREATE PROCEDURE為用來創(chuàng)建存儲(chǔ)函數(shù)的關(guān)鍵字: sp_ _name為存儲(chǔ)過程的名稱;proc_ parameter 為指定存儲(chǔ)過程的參數(shù)列表,列表形式如下:

[N1 OUT 1 INOUT] param name type

其中,IN表示輸入?yún)?shù),OUT表示輸出參數(shù),INOUT表示既可以輸入也可以輸出;param_ name表示參數(shù)名稱; type 表示參數(shù)的類型,該類型可以是MySQL數(shù)據(jù)庫中的任意類型。

characteristics指定存儲(chǔ)過程的特性,有以下取值:

LANGUAGESQL:說明routine_body部分是由SQL語句組成的,當(dāng)前系統(tǒng)支持的語言為SQL,SQL是LANGUAGE特性的唯一值。

[NOT] DETERMINISTIC:指明存儲(chǔ)過程執(zhí)行的結(jié)果是否確定。DETERMINISTIC 表示。結(jié)果是確定的。每次執(zhí)行存儲(chǔ)過程時(shí),相同的輸入會(huì)得到相同的輸出。NOTDETERMINISTIC表示結(jié)果是不確定的,相同的輸入可能得到不同的輸出。如果沒有指定任意一個(gè)值,默認(rèn)為NOT DETERMINISTIC.

{ CONTAINS SQL |NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL語句的限制。CONTAINS SQL表明子程序包含SQL語句,但是不包含讀寫數(shù)據(jù)的語句; NO SQL表明子程序不包含SQL語句; READS SQL DATA說明子程序包含讀數(shù)據(jù)的語句; MODIFIES SQL DATA表明子程序包含寫數(shù)據(jù)的語句。默認(rèn)情況下,系統(tǒng)會(huì)指定為CONTAINS SQL。

SQL SECURITY { DEFINER |INVOKER }:指明誰有權(quán)限來執(zhí)行。DEFINER表示只有定義者才能執(zhí)行。INVOKER表示擁有權(quán)限的調(diào)用者可以執(zhí)行。默認(rèn)情況下,系統(tǒng)指定為DEFINER。

COMMENT ‘string’: 注釋信息,可以用來描述存儲(chǔ)過程或函數(shù)。

routine_ body是SQL代碼的內(nèi)容,可以用BEGIN.END來表示SQL代碼的開始和結(jié)束。編寫存儲(chǔ)過程并不是件簡單的事情,可能存儲(chǔ)過程中需要復(fù)雜的SQL語句,并且要有創(chuàng)建存儲(chǔ)過程的權(quán)限;但是使用存儲(chǔ)過程將簡化操作,減少冗余的操作步驟,同時(shí),還可以減少操作過程中的失誤,提高效率,因此存儲(chǔ)過程是非常有用的,而且應(yīng)該盡可能地學(xué)會(huì)使用。

下面的代碼演示了存儲(chǔ)過程的內(nèi)容,名稱為AvgFruitPrice,返回所有水果的平均價(jià)格,輸入代碼如下:

CREATE PROCEDURE AvgFruitPrice ()

BEGIN

SELECT AVG(f price) AS avgprice

FROM fruits;

END;

上述代碼中,此存儲(chǔ)過程名為AvgFruitPrice, 使用CREATE PROCEDURE AvgFruitPrice 0語句定義。此存儲(chǔ)過程沒有參數(shù),但是后面的0仍然需要。BEGIN和END語句用來限定存儲(chǔ)過程體,過程本身僅是一個(gè)簡單的SELECT語句(AVG為求字段平均值的函數(shù))。

創(chuàng)建查看fruits 表的存儲(chǔ)過程,代碼如下:

CREATE PROCEDURE Proc()

BEGIN

SELECT * FROM fruits;

END;

這行代碼創(chuàng)建了一個(gè)查看fruits表的存儲(chǔ)過程,每次調(diào)用這個(gè)存儲(chǔ)過程的時(shí)候都會(huì)執(zhí)行SELECT語句查看表的內(nèi)容,代碼的執(zhí)行過程如下:

這個(gè)存儲(chǔ)過程和使用SELECT語句查看表的效果得到的結(jié)果是一樣的,當(dāng)然存儲(chǔ)過程也可以是很多語句的復(fù)雜組合,其本身也可以調(diào)用其他的函數(shù)來組成更加復(fù)雜的操作。

“DELIMITER //”語句的作用是將MySQL的結(jié)束符設(shè)置為//,因?yàn)镸ySQL默認(rèn)的語句結(jié)束符號(hào)為分號(hào);’,為了避免與存儲(chǔ)過程中SQL語句結(jié)束符相沖突,需要使用DELIMITER改變存儲(chǔ)過程的結(jié)束符,并以“END//“ 結(jié)束存儲(chǔ)過程。存儲(chǔ)過程定義完畢之后再使用“DELIMITER;”” 恢復(fù)默認(rèn)結(jié)束符。DELIMITER 也可以指定其他符號(hào)做為結(jié)束符。

創(chuàng)建名稱為CountProc的存儲(chǔ)過程,代碼如下:

CREATE PROCEDURE CountProc (OUT paraml INT)

BEGIN

SELECT COUNT(*) INTO paraml FROM fruits;

END;

上述代碼的作用是創(chuàng)建-一個(gè)獲取fruits 表記錄條數(shù)的存儲(chǔ)過程,名稱是CountProc,COUNT(*)計(jì)算后把結(jié)果放入?yún)?shù)paraml中。代碼的執(zhí)行結(jié)果如下:

當(dāng)使用DELIMITER命令時(shí),應(yīng)該避免使用反斜杠(“‘ )字符,因?yàn)榉葱本€是MySQL的轉(zhuǎn)義字符。

創(chuàng)建存儲(chǔ)函數(shù)

創(chuàng)建存儲(chǔ)函數(shù),需要使用CREATE FUNCTION語句,基本語法格式如下:

CREATE FUNCTION func name ( [func_ parameter] )

RETURNS type

[characteristic 。..] routine_ body

CREATE FUNCTION為用來創(chuàng)建存儲(chǔ)函數(shù)的關(guān)鍵字; func_ _name 表示存儲(chǔ)函數(shù)的名稱;func_ parameter 為存儲(chǔ)過程的參數(shù)列表,參數(shù)列表形式如下:

[ INIOUT 1 INOUT ] param name type

其中,IN表示輸入?yún)?shù),OUT表示輸出參數(shù),INOUT表示既可以輸入也可以輸出;param_ name表示參數(shù)名稱; type 表示參數(shù)的類型,該類型可以是MySQL數(shù)據(jù)庫中的任意類型。

RETURNS type 語句表示函數(shù)返回?cái)?shù)據(jù)的類型; characteristic 指定存儲(chǔ)函數(shù)的特性,取值與創(chuàng)建存儲(chǔ)過程時(shí)相同,這里不再贅述。

創(chuàng)建存儲(chǔ)函數(shù),名稱為NameByZip,該函數(shù)返回SELECT語句的查詢結(jié)果,數(shù)值類型為字符串型,代碼如下:

CREATE FUNCTION NameByZip ()

RETURNS CHAR(50)

RETURN (SELECT s_ name FROM suppliers WHERE S call= 148075’) ;

創(chuàng)建一個(gè)存儲(chǔ)函數(shù), 參數(shù)定義為空,返回-一個(gè)INT類型的結(jié)果。代碼的執(zhí)行結(jié)果如下:

mysq1》 DELIMITER //

mysql》 CREATE FUNCTION NameByZip ()

-》 RETURNS CHAR(50)

-》 RETURN 設(shè)(SELECT s name FROM suppliers WHERE 8 call= 1480755);

-》 //

Query OK,0 rows affected (0.12 sec)

mysq1》 DELIMITER ;

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

指定參數(shù)為IN、ouT或INOUT只對PROCEDURE是合法的。(FUNCTION 中總是默認(rèn)為IN參數(shù))。RETURNS子句只能對FUNCTION做指定,對函數(shù)而言這是強(qiáng)制的。它用來指定函數(shù)的返回類型,而且函數(shù)體必領(lǐng)包含一個(gè)RETURN value語句。

變量的使用

變量可以在子程序中聲明并使用,這些變量的作用范圍是在BEGIN..END程序中,本小節(jié)主要介紹如何定義變量和為變量賦值。

1、定義變量

在存儲(chǔ)過程中使用DECLARE語句定義變量,語法格式如下:

DECLARE var name [, varname]。 date type [ DEFAULT value] ;

var_ name為局部變量的名稱。DEFAULT value子句給變量提供一個(gè)默認(rèn)值。 值除了可以被聲明為一個(gè)常數(shù)之外,還可以被指定為一個(gè)表達(dá)式。如果沒有DEFAULT 子句,初始值為NULL.

定義名稱為myparam的變量,類型為INT類型,默認(rèn)值為100,代碼如下:

DECLARE myparam INT DEFAULT 100;

2、為變量賦值

定義變量之后為變量賦值可以改變變量的默認(rèn)值MySQL中使用SET語句為變量賦值,語法格式如下:

SET var_ name來expr[,var_ name = expr] 。..。

在存儲(chǔ)程序中的SET語句是一-般SET語句的擴(kuò)展版本。被參考變量可能是子程序內(nèi)聲明的變量,或者是全局服務(wù)器變量,如系統(tǒng)變量或者用戶變量。

在存儲(chǔ)程序中的SET語句作為預(yù)先存在的SET語法的一部分來實(shí)現(xiàn)。這允許SET a=x,b=y, 。這樣的擴(kuò)展語法。其中不同的變量類型(局域聲明變量及全局變量)可以被混合起來。這也允許把局部變量和--些只對系統(tǒng)變量有意義的選項(xiàng)合并起來。

聲明3個(gè)變量,分別為varl、var2 和var3,數(shù)據(jù)類型為INT,使用SET為變量賦值,代碼如下:

DECLARE var1, var2, var3 INT;

SET var1 =10, var2 = 20;

SET var3 =varl+var2;

MySQL中還可以通過SELECT 。.. INTO為-一個(gè)或多個(gè)變量賦值,語法如下:

SELECT col name[,。..] INTO var name[, 。..] table_ expr;

這個(gè)SELECT語法把選定的列直接存儲(chǔ)到對應(yīng)位置的變量。col name 表示字段名稱;var_ name表示定義的變量名稱table_ _expr 表示查詢條件表達(dá)式包括表名稱和WHERE子句。

聲明變量fruitname 和fruitprice, 通過SELECT 。.. INtO語句查詢指定記錄并為變量賦值,代碼如下:

DECLARE fruitname CHAR(50) ;

DECLARE fruitprice DECIMAL(8,2) ;

SELECT f_name, f_price INTO fruitname, fruitprice

FROM fruits WHEREf id =‘a(chǎn)l’ ;

以上就是小編整理的MySQL的創(chuàng)建存儲(chǔ)過程,只是小編的個(gè)人理解,有哪里不準(zhǔn)確的地方,還請大家多多指出,小編和大家一起共同進(jìn)步~~~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4478

    瀏覽量

    86955
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3885

    瀏覽量

    65620
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    841

    瀏覽量

    27387
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    本地安裝并創(chuàng)建MySQL數(shù)據(jù)庫

    本地安裝并創(chuàng)建MySQL數(shù)據(jù)庫
    的頭像 發(fā)表于 01-13 15:15 ?1024次閱讀
    本地安裝并<b class='flag-5'>創(chuàng)建</b><b class='flag-5'>MySQL</b>數(shù)據(jù)庫

    手把手教你入門MySQL零基礎(chǔ)入門教程!

    手把手教你入門MySQL零基礎(chǔ)入門教程! 目前MySQL已經(jīng)成為最為流行的開源關(guān)系數(shù)據(jù)庫系統(tǒng),并且一步一步地占領(lǐng)了原有商業(yè)數(shù)據(jù)庫的市場。可以看到Google、Facebook、Yahoo、網(wǎng)易、久
    發(fā)表于 06-15 13:20

    MySql的常用操作整理

    MySql——基本知識(shí)整理
    發(fā)表于 04-09 13:35

    MySql存儲(chǔ)過程創(chuàng)建以及Mybatis的調(diào)用遇到的問題概述

    MySql存儲(chǔ)過程創(chuàng)建以及Mybatis的調(diào)用
    發(fā)表于 07-04 11:06

    MySQL用戶創(chuàng)建流程

    MySQL創(chuàng)建用戶與授權(quán)
    發(fā)表于 10-30 09:12

    MySql存儲(chǔ)過程是什么?

    MySql——存儲(chǔ)過程
    發(fā)表于 11-06 09:26

    mysql存儲(chǔ)過程和函數(shù)是什么

    mysql存儲(chǔ)過程和函數(shù)
    發(fā)表于 05-13 11:51

    Golang調(diào)用MySQL存儲(chǔ)過程解析

    Golang 調(diào)用MySQL存儲(chǔ)過程
    發(fā)表于 06-05 17:42

    MySQL5新特性之存儲(chǔ)過程

    MySQL5新特性之存儲(chǔ)過程 MySQL5新特性之存儲(chǔ)過程
    發(fā)表于 06-12 10:08 ?0次下載

    MySQL5新特性之存儲(chǔ)過程

    MySQL 5.0 存儲(chǔ)過程
    發(fā)表于 11-23 10:55 ?9次下載

    mysql存儲(chǔ)過程實(shí)例

    一個(gè)存儲(chǔ)過程是一個(gè)可編程的函數(shù),它在數(shù)據(jù)庫中創(chuàng)建并保存。它可以有SQL語句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺(tái)上執(zhí)行相同的函數(shù),或者封裝特定功能時(shí),存儲(chǔ)
    發(fā)表于 12-26 09:44 ?2266次閱讀
    <b class='flag-5'>mysql</b><b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>過程</b>實(shí)例

    mysql數(shù)據(jù)庫存儲(chǔ)路徑怎么更改

    %; #查看sql存儲(chǔ)路徑 (查看datadir 那一行所指的路徑) quit; 2.停止mysql服務(wù) service mysqld stop 3.創(chuàng)建新的數(shù)據(jù)庫存放目錄 mkdir /data/m
    的頭像 發(fā)表于 10-18 10:23 ?6832次閱讀

    如何使用WINDAQ MySQL存儲(chǔ)數(shù)據(jù)

    MySQL數(shù)據(jù)庫可以存儲(chǔ)比Microsoft Excel電子表格多30,000倍的數(shù)據(jù)。用于 結(jié)合WinDaq/Lite,Pro或Pro+,WinDaq / MySQL對于那些需要存儲(chǔ)
    的頭像 發(fā)表于 12-02 16:29 ?1066次閱讀
    如何使用WINDAQ <b class='flag-5'>MySQL</b><b class='flag-5'>存儲(chǔ)</b>數(shù)據(jù)

    剖析MySQL InnoDB存儲(chǔ)原理(上)

    一、MySQL記錄的存儲(chǔ)結(jié)構(gòu): 1、Page的結(jié)構(gòu),如下圖:
    的頭像 發(fā)表于 02-15 15:45 ?554次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b> InnoDB<b class='flag-5'>存儲(chǔ)</b>原理(上)

    mysql存儲(chǔ)過程的優(yōu)點(diǎn)與缺點(diǎn)

    mysql存儲(chǔ)過程已被視為應(yīng)用程序通過使用編碼方法或“過程”訪問和操作數(shù)據(jù)庫信息的事實(shí)標(biāo)準(zhǔn)。這主要是由于它們?yōu)殚_發(fā)人員提供的:將SQL的基于集合的功能與代碼開發(fā)的迭代和條件處理控制相結(jié)
    的頭像 發(fā)表于 03-31 17:02 ?1866次閱讀
    主站蜘蛛池模板: 国产xxxx极品bbw视色 | 思思久99久女女精品 | 天天射夜夜操 | 亚洲成a人在线播放www | 天天天做天天天天爱天天想 | 李丽莎尤物福利视频 | 国产女同在线观看 | 久久草在线视频播放 | 日本不卡高清免费 | 性欧美17一18sex性高清 | 俄罗斯美女在线观看一区 | 美女网站黄页 | 国产三级免费观看 | 欧美男人的天堂 | 青草青草视频2免费观看 | 国产美女视频一区二区三区 | 一区二区三区四区在线视频 | 欧美人与物另类 | tube69欧美最新片 | 激情综合色综合久久综合 | 在线午夜视频 | 拍拍拍交性免费视频 | 丁香天堂网 | 一区二区美女视频 | 在线观看免费xx高清视频 | 爱爱456高清国语在线456 | 色婷婷久久| 天堂bt种子资源地址在线 | 日本aaaa视频| 欧美freesex10一|3| 黄页网站在线播放 | 免费一级毛片无毒不卡 | 天天色天天 | 久久国产视频一区 | 伊人天天操| 97人人视频 | 免费人成在线观看网站 | 色丁香在线 | 色屁屁www影院免费观看视频 | 天堂在线观看视频观看www | 狼人激情网 |