最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:

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變量,會將形參的值重新賦值給實參變量

相關(guān)文章

  • MySQL和Oracle的元數(shù)據(jù)抽取實例分析

    MySQL和Oracle的元數(shù)據(jù)抽取實例分析

    MySQL和Oracle雖然在架構(gòu)上有很大的不同,但是如果從某些方面比較起來,它們有些方面也是相通的,下面這篇文章主要給大家介紹了關(guān)于MySQL和Oracle元數(shù)據(jù)抽取的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • MySQL使用Partition功能實現(xiàn)水平分區(qū)的策略

    MySQL使用Partition功能實現(xiàn)水平分區(qū)的策略

    這篇文章主要介紹了MySQL使用Partition功能實現(xiàn)水平分區(qū),給大家提到了水平分區(qū)的5種策略,通過sql語句給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • MySQL內(nèi)存使用之線程獨享介紹

    MySQL內(nèi)存使用之線程獨享介紹

    這篇文章主要介紹了MySQL內(nèi)存使用之線程獨享介紹,線程獨享內(nèi)存主要用于各客戶端連接線程存儲各種操作的獨享數(shù)據(jù),如線程棧信息,分組排序操作,數(shù)據(jù)讀寫緩沖,結(jié)果集暫存等等,而且大多數(shù)可以通過相關(guān)參數(shù)來控制內(nèi)存的使用量,需要的朋友可以參考下
    2014-12-12
  • MySQL數(shù)據(jù)庫查看日志操作指南

    MySQL數(shù)據(jù)庫查看日志操作指南

    這篇文章主要介紹了MySQL數(shù)據(jù)庫查看日志操作的相關(guān)資料,文中講了MySQL中的四種日志,分別是錯誤日志、二進(jìn)制日志、查詢?nèi)罩竞吐樵內(nèi)罩?需要的朋友可以參考下
    2025-02-02
  • mysql默認(rèn)編碼為UTF-8 通過修改my.ini實現(xiàn)方法

    mysql默認(rèn)編碼為UTF-8 通過修改my.ini實現(xiàn)方法

    這篇文章主要介紹了mysql默認(rèn)編碼為UTF-8 通過修改my.ini實現(xiàn)方法的相關(guān)資料,為了防止出現(xiàn)亂碼,Latin1是不支持漢字的,所以要將其改為UTF-8或GBK,需要的朋友可以參考下
    2017-01-01
  • MySQL5.x版本亂碼問題解決方案

    MySQL5.x版本亂碼問題解決方案

    這篇文章主要介紹了MySQL5.x版本亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL經(jīng)常需要將字符串類型的日期轉(zhuǎn)換成日期或時間類型,本文主要介紹了MySQL?字符串日期格式轉(zhuǎn)換的幾種方法,包括使用STR_TO_DATE()和DATE_FORMAT()函數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Mysql WorkBench安裝配置圖文教程

    Mysql WorkBench安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了Mysql WorkBench安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL高級查詢語法分析

    MySQL高級查詢語法分析

    在面試過程中經(jīng)常會遇到sq查詢問題,今天小編通過本文給大家介紹下MySQL高級查詢語法分析,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • MySQL錯誤“Specified key was too long; max key length is 1000 bytes”的解決辦法

    MySQL錯誤“Specified key was too long; max key length is 1000 b

    今天在為數(shù)據(jù)庫中的某兩個字段設(shè)置unique索引的時候,出現(xiàn)了Specified key was too long; max key length is 1000 bytes錯誤
    2010-08-08

最新評論

蒲城县| 咸宁市| 望城县| 饶平县| 石门县| 寿光市| 肥东县| 温宿县| 澄迈县| 兰溪市| 竹溪县| 绵阳市| 青州市| 易门县| 宜丰县| 高清| 阳江市| 化隆| 塔河县| 紫金县| 屏南县| 安义县| 苏尼特左旗| 德阳市| 姚安县| 文化| 江阴市| 肥城市| 锡林浩特市| 沾化县| 铜梁县| 京山县| 新巴尔虎右旗| 衡阳市| 杭锦旗| 固镇县| 青川县| 容城县| 湾仔区| 饶平县| 贵州省|