亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數(shù)據(jù)庫(kù)之存儲(chǔ)過程?procedure

 更新時(shí)間:2022年06月15日 17:03:39   作者:彭世瑜  
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)之存儲(chǔ)過程?procedure,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

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

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

1.1、相同點(diǎn)

  • 都是為了可重復(fù)地執(zhí)行操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句集合
  • 都是一次編譯,多次執(zhí)行

1.2、不同點(diǎn)

  • 標(biāo)識(shí)符不同,函數(shù)function 過程 procedure
  • 函數(shù)中有返回值,且必須返回,而過程沒有返回值
  • 過程無返回值類型,不能將結(jié)果直接賦值給變量;函數(shù)有返回值類型,調(diào)用時(shí),除了在select中,必須將返回值賦值給變量
  • 函數(shù)可以再select語(yǔ)句中直接使用,而過程不能

2、存儲(chǔ)過程的操作

2.1、創(chuàng)建過程

基本語(yǔ)法:

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

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

create procedure my_pro1()
select * from my_student;

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

-- 修改語(yǔ)句結(jié)束符
delimiter $$
-- 創(chuàng)建過程
create procedure my_pro2()
begin
    -- 求1到100之間的和
    -- 創(chuàng)建局部變量
    declare i int default 1;
    -- declare sum int default 0;
    -- 會(huì)話變量
    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、查看過程

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

2.3、調(diào)用過程

過程沒有返回值

基本語(yǔ)法:

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

2.4、刪除過程

基本語(yǔ)法:

drop procedure 過程名;

3、存儲(chǔ)過程的形參類型

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

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

  • in:(值傳遞)參數(shù)從外部傳入,在過程內(nèi)部使用,可以是直接數(shù)據(jù),也可以是保存數(shù)據(jù)的變量
  • out:(引用傳遞)參數(shù)在過程中賦值,傳入必須是變量,如果有外部數(shù)據(jù),會(huì)被清空為null
  • inout:(引用傳遞)數(shù)據(jù)可以從外部傳入過程內(nèi)部使用,同時(shí)內(nèi)部操作之后,又回將數(shù)據(jù)返回給外部

代碼示例:

-- 創(chuàng)建3個(gè)會(huì)話變量
set @var1 = 1;
set @var2 = 2;
set @var3 = 3;
-- 查詢會(huì)話變量
select @var1, @var2, @var3;
+-------+-------+-------+
| @var1 | @var2 | @var3 |
+-------+-------+-------+
|     1 |     2 |     3 |
+-------+-------+-------+
1 row in set (0.00 sec)
-- 修改語(yǔ)句結(jié)束符
delimiter $$
-- 定義過程
create procedure my_pro3(in a int, out b int, inout c int)
begin
    -- 查看傳入的3個(gè)數(shù)據(jù)值
    select a, b, c;
    -- +------+------+------+
    -- | a    | b    | c    |
    -- +------+------+------+
    -- |    1 | NULL |    3 |
    -- +------+------+------+
    -- 修改3個(gè)變量值
    set a = 10;
    set b = 20;
    set c = 30;
    select a, b, c;
    -- +------+------+------+
    -- | a    | b    | c    |
    -- +------+------+------+
    -- |   10 |   20 |   30 |
    -- +------+------+------+
    -- 查看會(huì)話變量
    select @var1, @var2, @var3;
    -- +-------+-------+-------+
    -- | @var1 | @var2 | @var3 |
    -- +-------+-------+-------+
    -- |     1 |     2 |     3 |
    -- +-------+-------+-------+
    -- 修改會(huì)話變量
    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);

-- 再次查看會(huì)話變量
mysql> select @var1, @var2, @var3;
+-------+-------+-------+
| @var1 | @var2 | @var3 |
+-------+-------+-------+
| a     |    20 |    30 |
+-------+-------+-------+

分析:

  • 1、實(shí)參傳入過程之后,實(shí)際上沒有改變外部變量的值,而是把值給了形參,out類型不能接收外部變量的值,默認(rèn)為null
  • 2、當(dāng)過程執(zhí)行到end 的時(shí)候,如果是out或inout變量,會(huì)將形參的值重新賦值給實(shí)參變量

相關(guān)文章

  • MySQL運(yùn)算符!=和<>及=和<=>的使用區(qū)別

    MySQL運(yùn)算符!=和<>及=和<=>的使用區(qū)別

    本文主要介紹了MySQL運(yùn)算符!=和<>及=和<=>的使用區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解MySQL like如何查詢包含''%''的字段(ESCAPE用法)

    詳解MySQL like如何查詢包含''%''的字段(ESCAPE用法)

    這篇文章主要介紹了詳解MySQL like如何查詢包含'%'的字段(ESCAPE用法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    本文是基于已有k8s環(huán)境下,介紹在k8s環(huán)境中部署mysql主從集群的實(shí)現(xiàn)步驟,對(duì)mysql學(xué)習(xí)有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2023-01-01
  • mysql中insert與select的嵌套使用解決組合字段插入問題

    mysql中insert與select的嵌套使用解決組合字段插入問題

    本節(jié)主要介紹了mysql中insert與select的嵌套使用解決組合字段插入問題,需要的朋友可以參考下
    2014-07-07
  • 淺談MySQL數(shù)據(jù)查詢太多會(huì)OOM嗎

    淺談MySQL數(shù)據(jù)查詢太多會(huì)OOM嗎

    本文主要介紹了淺談MySQL數(shù)據(jù)查詢太多會(huì)OOM嗎?文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • MySQL千萬級(jí)大數(shù)據(jù)SQL查詢優(yōu)化知識(shí)點(diǎn)總結(jié)

    MySQL千萬級(jí)大數(shù)據(jù)SQL查詢優(yōu)化知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于MySQL千萬級(jí)大數(shù)據(jù)SQL查詢優(yōu)化知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2019-12-12
  • MYSQL數(shù)據(jù)庫(kù)表結(jié)構(gòu)優(yōu)化方法詳解

    MYSQL數(shù)據(jù)庫(kù)表結(jié)構(gòu)優(yōu)化方法詳解

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)表結(jié)構(gòu)優(yōu)化方法,總結(jié)分析了mysql針對(duì)表結(jié)構(gòu)優(yōu)化的數(shù)據(jù)類型選擇、范式化操作、表的拆分等相關(guān)使用技巧,需要的朋友可以參考下
    2019-08-08
  • Win10下免安裝版MySQL5.7的安裝和配置教程詳解

    Win10下免安裝版MySQL5.7的安裝和配置教程詳解

    這篇文章主要介紹了Win10下免安裝版MySQL5.7的安裝和配置教程詳解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Ubuntu與windows雙系統(tǒng)下共用MySQL數(shù)據(jù)庫(kù)的方法

    Ubuntu與windows雙系統(tǒng)下共用MySQL數(shù)據(jù)庫(kù)的方法

    ubuntu系統(tǒng)和windows系統(tǒng)雙系統(tǒng)共用是用戶喜歡使用的方式之一,而MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在Windows平臺(tái)中常以WAMP方式搭配使用,在Linux平臺(tái)中常以LAMP組合形式出現(xiàn),下面的方法可以使得Ubuntu平臺(tái)共用Windows平臺(tái)中的MySQL數(shù)據(jù)庫(kù)
    2012-01-01
  • Mysql大型SQL文件快速恢復(fù)方案分享

    Mysql大型SQL文件快速恢復(fù)方案分享

    這篇文章主要給大家介紹了關(guān)于Mysql大型SQL文件快速恢復(fù)方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論