色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

整理剖析,只為教你創建MySQL存儲過程

如意 ? 來源:百家號 ? 作者: 程序員碼農范兒 ? 2020-07-02 17:11 ? 次閱讀

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

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

創建存儲過程

創建存儲過程,需要使用CREATE PROCEDURE語句,基本語法格式如下:

CREATE PROCEDURE sp name ( [ proc parameter])

[ characteristics…] routine_ body

CREATE PROCEDURE為用來創建存儲函數的關鍵字: sp_ _name為存儲過程的名稱;proc_ parameter 為指定存儲過程的參數列表,列表形式如下:

[N1 OUT 1 INOUT] param name type

其中,IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;param_ name表示參數名稱; type 表示參數的類型,該類型可以是MySQL數據庫中的任意類型。

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

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

[NOT] DETERMINISTIC:指明存儲過程執行的結果是否確定。DETERMINISTIC 表示。結果是確定的。每次執行存儲過程時,相同的輸入會得到相同的輸出。NOTDETERMINISTIC表示結果是不確定的,相同的輸入可能得到不同的輸出。如果沒有指定任意一個值,默認為NOT DETERMINISTIC.

{ CONTAINS SQL |NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL語句的限制。CONTAINS SQL表明子程序包含SQL語句,但是不包含讀寫數據的語句; NO SQL表明子程序不包含SQL語句; READS SQL DATA說明子程序包含讀數據的語句; MODIFIES SQL DATA表明子程序包含寫數據的語句。默認情況下,系統會指定為CONTAINS SQL。

SQL SECURITY { DEFINER |INVOKER }:指明誰有權限來執行。DEFINER表示只有定義者才能執行。INVOKER表示擁有權限的調用者可以執行。默認情況下,系統指定為DEFINER。

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

routine_ body是SQL代碼的內容,可以用BEGIN.END來表示SQL代碼的開始和結束。編寫存儲過程并不是件簡單的事情,可能存儲過程中需要復雜的SQL語句,并且要有創建存儲過程的權限;但是使用存儲過程將簡化操作,減少冗余的操作步驟,同時,還可以減少操作過程中的失誤,提高效率,因此存儲過程是非常有用的,而且應該盡可能地學會使用。

下面的代碼演示了存儲過程的內容,名稱為AvgFruitPrice,返回所有水果的平均價格,輸入代碼如下:

CREATE PROCEDURE AvgFruitPrice ()

BEGIN

SELECT AVG(f price) AS avgprice

FROM fruits;

END;

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

創建查看fruits 表的存儲過程,代碼如下:

CREATE PROCEDURE Proc()

BEGIN

SELECT * FROM fruits;

END;

這行代碼創建了一個查看fruits表的存儲過程,每次調用這個存儲過程的時候都會執行SELECT語句查看表的內容,代碼的執行過程如下:

這個存儲過程和使用SELECT語句查看表的效果得到的結果是一樣的,當然存儲過程也可以是很多語句的復雜組合,其本身也可以調用其他的函數來組成更加復雜的操作。

“DELIMITER //”語句的作用是將MySQL的結束符設置為//,因為MySQL默認的語句結束符號為分號;’,為了避免與存儲過程中SQL語句結束符相沖突,需要使用DELIMITER改變存儲過程的結束符,并以“END//“ 結束存儲過程。存儲過程定義完畢之后再使用“DELIMITER;”” 恢復默認結束符。DELIMITER 也可以指定其他符號做為結束符。

創建名稱為CountProc的存儲過程,代碼如下:

CREATE PROCEDURE CountProc (OUT paraml INT)

BEGIN

SELECT COUNT(*) INTO paraml FROM fruits;

END;

上述代碼的作用是創建-一個獲取fruits 表記錄條數的存儲過程,名稱是CountProc,COUNT(*)計算后把結果放入參數paraml中。代碼的執行結果如下:

當使用DELIMITER命令時,應該避免使用反斜杠(“‘ )字符,因為反斜線是MySQL的轉義字符。

創建存儲函數

創建存儲函數,需要使用CREATE FUNCTION語句,基本語法格式如下:

CREATE FUNCTION func name ( [func_ parameter] )

RETURNS type

[characteristic 。..] routine_ body

CREATE FUNCTION為用來創建存儲函數的關鍵字; func_ _name 表示存儲函數的名稱;func_ parameter 為存儲過程的參數列表,參數列表形式如下:

[ INIOUT 1 INOUT ] param name type

其中,IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;param_ name表示參數名稱; type 表示參數的類型,該類型可以是MySQL數據庫中的任意類型。

RETURNS type 語句表示函數返回數據的類型; characteristic 指定存儲函數的特性,取值與創建存儲過程時相同,這里不再贅述。

創建存儲函數,名稱為NameByZip,該函數返回SELECT語句的查詢結果,數值類型為字符串型,代碼如下:

CREATE FUNCTION NameByZip ()

RETURNS CHAR(50)

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

創建一個存儲函數, 參數定義為空,返回-一個INT類型的結果。代碼的執行結果如下:

mysq1》 DELIMITER //

mysql》 CREATE FUNCTION NameByZip ()

-》 RETURNS CHAR(50)

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

-》 //

Query OK,0 rows affected (0.12 sec)

mysq1》 DELIMITER ;

如果在存儲函數中的RETURN語句返回一個類型不同于函數的RETURNS子句中指定類型的值,返回值將被強制為恰當的類型。比如,如果-一個函數返回-一個ENUM或SET值,但是RETURN語句返回一個整數,對于SET成員集的相應的ENUM成員,從函數返回的值是字符串。

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

變量的使用

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

1、定義變量

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

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

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

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

DECLARE myparam INT DEFAULT 100;

2、為變量賦值

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

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

在存儲程序中的SET語句是一-般SET語句的擴展版本。被參考變量可能是子程序內聲明的變量,或者是全局服務器變量,如系統變量或者用戶變量。

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

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

DECLARE var1, var2, var3 INT;

SET var1 =10, var2 = 20;

SET var3 =varl+var2;

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

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

這個SELECT語法把選定的列直接存儲到對應位置的變量。col name 表示字段名稱;var_ name表示定義的變量名稱table_ _expr 表示查詢條件表達式包括表名稱和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 =‘al’ ;

以上就是小編整理的MySQL的創建存儲過程,只是小編的個人理解,有哪里不準確的地方,還請大家多多指出,小編和大家一起共同進步~~~

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4296

    瀏覽量

    85799
  • 數據庫
    +關注

    關注

    7

    文章

    3794

    瀏覽量

    64360
  • MySQL
    +關注

    關注

    1

    文章

    804

    瀏覽量

    26530
收藏 人收藏

    評論

    相關推薦

    本地安裝并創建MySQL數據庫

    本地安裝并創建MySQL數據庫
    的頭像 發表于 01-13 15:15 ?857次閱讀
    本地安裝并<b class='flag-5'>創建</b><b class='flag-5'>MySQL</b>數據庫

    手把手教你入門MySQL零基礎入門教程!

    手把手教你入門MySQL零基礎入門教程! 目前MySQL已經成為最為流行的開源關系數據庫系統,并且一步一步地占領了原有商業數據庫的市場。可以看到Google、Facebook、Yahoo、網易、久
    發表于 06-15 13:20

    MySql的常用操作整理

    MySql——基本知識整理
    發表于 04-09 13:35

    MySql存儲過程創建以及Mybatis的調用遇到的問題概述

    MySql存儲過程創建以及Mybatis的調用
    發表于 07-04 11:06

    MySQL用戶創建流程

    MySQL創建用戶與授權
    發表于 10-30 09:12

    MySql存儲過程是什么?

    MySql——存儲過程
    發表于 11-06 09:26

    mysql存儲過程和函數是什么

    mysql存儲過程和函數
    發表于 05-13 11:51

    Golang調用MySQL存儲過程解析

    Golang 調用MySQL存儲過程
    發表于 06-05 17:42

    MySQL5新特性之存儲過程

    MySQL5新特性之存儲過程 MySQL5新特性之存儲過程
    發表于 06-12 10:08 ?0次下載

    MySQL5新特性之存儲過程

    MySQL 5.0 存儲過程
    發表于 11-23 10:55 ?9次下載

    mysql存儲過程實例

    一個存儲過程是一個可編程的函數,它在數據庫中創建并保存。它可以有SQL語句和一些特殊的控制結構組成。當希望在不同的應用程序或平臺上執行相同的函數,或者封裝特定功能時,存儲
    發表于 12-26 09:44 ?2196次閱讀
    <b class='flag-5'>mysql</b><b class='flag-5'>存儲</b><b class='flag-5'>過程</b>實例

    mysql數據庫存儲路徑怎么更改

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

    如何使用WINDAQ MySQL存儲數據

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

    剖析MySQL InnoDB存儲原理(上)

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

    mysql存儲過程的優點與缺點

    mysql存儲過程已被視為應用程序通過使用編碼方法或“過程”訪問和操作數據庫信息的事實標準。這主要是由于它們為開發人員提供的:將SQL的基于集合的功能與代碼開發的迭代和條件處理控制相結
    的頭像 發表于 03-31 17:02 ?1678次閱讀
    主站蜘蛛池模板: 亚洲视频中文| 皮皮在线精品亚洲| 好大好硬好爽好深好硬视频 | 麻豆AV无码精品一区二区| 国内精品日本久久久久影院 | 亚洲日韩有码无线免费| 亚洲AV午夜福利精品香蕉麻豆| 双性将军粗壮H灌满怀孕| 日本特黄的免费大片视频| 日本精品久久久久中文字幕 1| 欧美牲交A欧美牲交VDO| 免费可以看污动画软件| 欧美成人一区二免费视频| 欧美黑大炮18p| 日本高清免费在线| 色戒未删减版在线观看完整| 神马电影我不卡4k手机在线观看| 最近的2019中文字幕国语完整版| 综合精品欧美日韩国产在线| 中国农村妇女真实BBWBBWBBW| 最近高清日本免费| 99re久久热在这里精品| chinese帅哥gv在线看| 大肚婆孕妇网| 国产精品99久久久久久动态图| 国产精品亚洲精品久久国语| 国产亚洲精品久久久久久国| 精品性影院一区二区三区内射| 久九九精品免费视频| 看电影来5566一区.二区| 嗯啊快停下我是你老师啊H| 青柠在线视频| 午夜伦理伦理片在线观| 亚洲熟伦熟女专区| 51精品少妇人妻AV一区二区| 白银谷在线观看| 国产久久亚洲美女久久| 精品人伦一区二区三区潘金莲| 久久在精品线影院| 日本护士性生活| 亚洲成AV人片一区二区不卡|