溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫之存儲過程怎么創(chuàng)建

發(fā)布時間:2022-06-16 10:28:03 來源:億速云 閱讀:133 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“MySQL數(shù)據(jù)庫之存儲過程怎么創(chuàng)建”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    前言:

    stored procedure 完成特定功能的SQL語句集,存儲在數(shù)據(jù)庫中,經(jīng)過第一次編譯之后再次調(diào)用不需要編譯(效率較高)

    1、存儲過程與函數(shù)的區(qū)別

    1.1、相同點

    • 都是為了可重復(fù)地執(zhí)行操作數(shù)據(jù)庫的SQL語句集合

    • 都是一次編譯,多次執(zhí)行

    1.2、不同點

    • 標(biāo)識符不同,函數(shù)function 過程 procedure

    • 函數(shù)中有返回值,且必須返回,而過程沒有返回值

    • 過程無返回值類型,不能將結(jié)果直接賦值給變量;函數(shù)有返回值類型,調(diào)用時,除了在select中,必須將返回值賦值給變量

    • 函數(shù)可以再select語句中直接使用,而過程不能

    2、存儲過程的操作

    2.1、創(chuàng)建過程

    基本語法:

    create procedure 過程名字([參數(shù)列表])
    bengin
        過程體
    end
    結(jié)束符

    如果只有只有一條指令可以省略begin和end

    create procedure my_pro1()
    select * from my_student;

    過程基本上可以完成函數(shù)對應(yīng)的所有功能:

    -- 修改語句結(jié)束符
    delimiter $$
    -- 創(chuàng)建過程
    create procedure my_pro2()
    begin
        -- 求1到100之間的和
        -- 創(chuàng)建局部變量
        declare i int default 1;
        -- declare sum int default 0;
        -- 會話變量
        set @sum = 0;
        -- 開始循環(huán)獲取結(jié)果
        while i <= 100 do
            -- 求和
            set @sum = @sum + i;
            set i = i + 1;
        end while;
    
        -- 顯示結(jié)果
        select @sum;
    end
    $$
    delimiter ;

    2.2、查看過程

    -- 查看所有存儲過程
    show procedure status [like 'pattern'];
    -- 查看過程的創(chuàng)建語句
    show create procedure 過程名字\G

    2.3、調(diào)用過程

    過程沒有返回值

    基本語法:

    call 過程名([實參列表]);
    -- eg:
    call my_pro2();
    +------+
    | @sum |
    +------+
    | 5050 |
    +------+

    2.4、刪除過程

    基本語法:

    drop procedure 過程名;

    3、存儲過程的形參類型

    存儲過程的參數(shù)和函數(shù)一樣,需要制定其類型

    但是存儲過程對參數(shù)還有額外的要求,自己的參數(shù)分類:

    • in:(值傳遞)參數(shù)從外部傳入,在過程內(nèi)部使用,可以是直接數(shù)據(jù),也可以是保存數(shù)據(jù)的變量

    • out:(引用傳遞)參數(shù)在過程中賦值,傳入必須是變量,如果有外部數(shù)據(jù),會被清空為null

    • inout:(引用傳遞)數(shù)據(jù)可以從外部傳入過程內(nèi)部使用,同時內(nèi)部操作之后,又回將數(shù)據(jù)返回給外部

    代碼示例:

    -- 創(chuàng)建3個會話變量
    set @var1 = 1;
    set @var2 = 2;
    set @var3 = 3;
    -- 查詢會話變量
    select @var1, @var2, @var3;
    +-------+-------+-------+
    | @var1 | @var2 | @var3 |
    +-------+-------+-------+
    |     1 |     2 |     3 |
    +-------+-------+-------+
    1 row in set (0.00 sec)
    -- 修改語句結(jié)束符
    delimiter $$
    -- 定義過程
    create procedure my_pro3(in a int, out b int, inout c int)
    begin
        -- 查看傳入的3個數(shù)據(jù)值
        select a, b, c;
        -- +------+------+------+
        -- | a    | b    | c    |
        -- +------+------+------+
        -- |    1 | NULL |    3 |
        -- +------+------+------+
        -- 修改3個變量值
        set a = 10;
        set b = 20;
        set c = 30;
        select a, b, c;
        -- +------+------+------+
        -- | a    | b    | c    |
        -- +------+------+------+
        -- |   10 |   20 |   30 |
        -- +------+------+------+
        -- 查看會話變量
        select @var1, @var2, @var3;
        -- +-------+-------+-------+
        -- | @var1 | @var2 | @var3 |
        -- +-------+-------+-------+
        -- |     1 |     2 |     3 |
        -- +-------+-------+-------+
        -- 修改會話變量
        set @var1 = 'a';
        set @var2 = 'b';
        set @var3 = 'c';
        select @var1, @var2, @var3;
        -- +-------+-------+-------+
        -- | @var1 | @var2 | @var3 |
        -- +-------+-------+-------+
        -- | a     | b     | c     |
        -- +-------+-------+-------+
    end
    $$
    delimiter ;
    -- 調(diào)用過程
    call my_pro3(@var1, @var2, @var3);
    
    -- 再次查看會話變量
    mysql> select @var1, @var2, @var3;
    +-------+-------+-------+
    | @var1 | @var2 | @var3 |
    +-------+-------+-------+
    | a     |    20 |    30 |
    +-------+-------+-------+

    分析:

    • 1、實參傳入過程之后,實際上沒有改變外部變量的值,而是把值給了形參,out類型不能接收外部變量的值,默認(rèn)為null

    • 2、當(dāng)過程執(zhí)行到end 的時候,如果是out或inout變量,會將形參的值重新賦值給實參變量

    “MySQL數(shù)據(jù)庫之存儲過程怎么創(chuàng)建”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI