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

MySQL存儲過程實踐(in、out、inout)

 更新時間:2025年11月13日 11:05:59   作者:愛吃丶辣包  
文章介紹了數(shù)據(jù)庫中的存儲過程,包括其定義、優(yōu)缺點、性能調(diào)校與撰寫,以及創(chuàng)建和調(diào)用方法,還詳細說明了存儲過程的參數(shù)類型,包括IN、OUT和INOUT,并提供了示例代碼,最后,文章還解決了存儲過程名已存在的報錯問題

簡述存儲過程

存儲過程就是數(shù)據(jù)庫中的函數(shù),增強數(shù)據(jù)庫的安全性

MySQL 5.0 版本開始支持存儲過程。

存儲過程的優(yōu)缺點

優(yōu)點

  1. 存儲過程執(zhí)行一次后,生成的二進制代碼就駐留在緩沖區(qū)
  2. 存儲過程是SQL語句加上控制語句的集合
  3. 存儲過程存儲在服務(wù)器端,客戶端調(diào)用時,直接在服務(wù)器端執(zhí)行,客戶端只是傳輸?shù)恼{(diào)用語句,從而可以降低網(wǎng)絡(luò)負載
  4. 存儲過程被創(chuàng)建后,可以多次重復(fù)調(diào)用

缺點

  1. 存儲過程,往往定制化于特定的數(shù)據(jù)庫上,因為支持的編程語言不同。當(dāng)切換到其他廠商的數(shù)據(jù)庫系統(tǒng)時,需要重寫原有的存儲過程。
  2. 存儲過程的性能調(diào)校與撰寫,受限于各種數(shù)據(jù)庫系統(tǒng)。

存儲過程的創(chuàng)建和調(diào)用

  • 存儲過程就是具有名字的一段代碼,用來完成一個特定的功能。
  • 創(chuàng)建的存儲過程保存在數(shù)據(jù)庫的數(shù)據(jù)字典中。

MySQL 存儲過程中的關(guān)鍵語法

聲明語句結(jié)束符,可以自定義:

DELIMITER $$
或
DELIMITER //

聲明存儲過程:

create procedure 存儲過程名(參數(shù))

存儲過程體:

create function 存儲函數(shù)名(參數(shù))

存儲過程開始和結(jié)束符號:

BEGIN .... END

變量賦值:

SET @p_in=1

查看數(shù)據(jù)庫中存在哪些存儲過程:

show procedure status 

案例

mysql> delimiter $$
mysql> create procedure qqq() 
    -> begin
    -> select * from info;
    -> end 
    -> $$

mysql> delimiter ;
mysql> call qqq();
+----+---------+-------+-------+------+
| id | name    | score | hobby | addr |
+----+---------+-------+-------+------+
|  1 | zhansan | 66.00 |     1 | nj   |
|  2 | lisi    | 68.00 |     2 | nj   |
|  3 | wangwu  | 74.00 |     3 | nj   |
|  4 | zhaoliu | 54.00 |     4 | NULL |
|  5 | xiaoqi  | 99.00 |     2 | nj   |
| 10 | T1      | 58.00 |     2 |      |
| 11 | owooo   | 55.00 |     1 |      |
| 12 | owo     | 55.00 |     1 |      |
| 13 | yowooo  | 58.00 |     1 |      |
| 14 | yowo    | 65.00 |     1 |      |
+----+---------+-------+-------+------+

存儲過程的參數(shù)

MySQL存儲過程的參數(shù)用在存儲過程的定義,共有三種參數(shù)類型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存儲過程名([[IN |OUT |INOUT ] 參數(shù)名 數(shù)據(jù)類形…])

  • IN 輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量)
  • OUT 輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個值)(傳出值只能是變量)
  • INOUT 輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)

1、 in 輸入?yún)?shù)

mysql> delimiter $$
mysql> create procedure in_A(in a int) 
    -> begin
    -> select a;
    -> set a=1;
    -> select a;
    -> end
    -> $$

mysql> delimiter ;
mysql> call in_A(2);
+------+
| a    |
+------+
|    2 |
+------+
+------+
| a    |
+------+
|    1 |
+------+

以上可以看出,a 在存儲過程中被修改,但并不影響 a 的值,因為前者為局部變量、后者為全局變量。

2、out輸出參數(shù)

mysql> delimiter $$
mysql> create procedure out_b(out b int) 
    -> begin
    -> select b;
    -> set b=2;
    -> select b;
    -> end
    -> $$

mysql> delimiter ;
mysql> set @b=1;

mysql> call out_b(@b);
+------+
| b    |
+------+
| NULL |
+------+
+------+
| b    |
+------+
|    2 |
+------+

因為out是向調(diào)用者輸出參數(shù),不接收輸入的參數(shù),所以存儲過程里的b為null

mysql> select @b;
+------+
| @b   |
+------+
|    2 |
+------+

調(diào)用了out_b存儲過程,輸出參數(shù),改變了b變量的值

3、inout輸入?yún)?shù)

mysql> delimiter $$
mysql> create procedure inout_a(inout a int)
    -> begin
    -> select a;
    -> set a=2;
    -> select a;
    -> end
    -> $$

mysql> delimiter ;
mysql> set @a=1;

mysql> call inout_a(@a);
+------+
| a    |
+------+
|    1 |
+------+
+------+
| a    |
+------+
|    2 |
+------+

mysql> select @a;
+------+
| @a   |
+------+
|    2 |
+------+

調(diào)用了inout_a存儲過程,接受了輸入的參數(shù),也輸出參數(shù),改變了變量

建議:

  • 輸入值使用in參數(shù)。
  • 返回值使用out參數(shù)。
  • inout參數(shù)就盡量的少用。

兩個橫桿–:這是用于單行注釋。

報錯

問題:

ERROR 1304 (42000): PROCEDURE test already exists

解決方法: test 存儲過程名已存在,換個存儲過程名可以了

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹,需要的朋友可以參考一下
    2013-05-05
  • MySQL如何生成自增的流水號

    MySQL如何生成自增的流水號

    這篇文章主要介紹了MySQL如何生成自增的流水號問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用mysql查詢當(dāng)天、近一周、近一個月及近一年的數(shù)據(jù)

    使用mysql查詢當(dāng)天、近一周、近一個月及近一年的數(shù)據(jù)

    不論你是一名數(shù)據(jù)庫管理員或SQL開發(fā)者,還是一名簡單的MySQL用戶,掌握查詢特定日期數(shù)據(jù)的方法都是必不可少的,下面這篇文章主要給大家介紹了關(guān)于如何使用mysql查詢當(dāng)天、近一周、近一個月及近一年的數(shù)據(jù),需要的朋友可以參考下
    2023-06-06
  • MYSQL updatexml()函數(shù)報錯注入解析

    MYSQL updatexml()函數(shù)報錯注入解析

    這篇文章主要介紹了MYSQL updatexml()函數(shù)報錯注入解析,并且簡單介紹了updatexml函數(shù),具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Mysql數(shù)據(jù)庫性能優(yōu)化二

    Mysql數(shù)據(jù)庫性能優(yōu)化二

    這篇文章主要介紹了Mysql數(shù)據(jù)庫性能優(yōu)化二 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • MySQL 數(shù)據(jù)恢復(fù)的多種方法匯總

    MySQL 數(shù)據(jù)恢復(fù)的多種方法匯總

    日常工作中,總會有因手抖、寫錯條件、寫錯表名、錯連生產(chǎn)庫造成的誤刪庫表和數(shù)據(jù)的事情發(fā)生。但是,如果每次刪庫都跑路的話,怕是再也不好找工作了吧!所以,刪庫跑路不是上上策
    2021-06-06
  • Mysql存儲過程學(xué)習(xí)筆記--建立簡單的存儲過程

    Mysql存儲過程學(xué)習(xí)筆記--建立簡單的存儲過程

    我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時候需要要先編譯,然后執(zhí)行,而存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給定參數(shù)(如果該存儲過程帶有參數(shù))來調(diào)用執(zhí)行它。
    2014-08-08
  • MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    本文主要介紹了MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • MySql 5.5.29綠色安裝教程詳解

    MySql 5.5.29綠色安裝教程詳解

    本文給大家介紹mysql5.5.29綠色安裝教程,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • Mysql之DELETE操作對應(yīng)的undo日志方式

    Mysql之DELETE操作對應(yīng)的undo日志方式

    InnoDB通過正常記錄鏈表和垃圾鏈表管理數(shù)據(jù)頁,刪除記錄先標(biāo)記為deletemark,后由purge線程移入垃圾鏈表回收空間,PAGE_FREE指向垃圾鏈表頭,PAGE_GARBAGE記錄可重用空間大小,Undo日志保存trx_id和roll_pointer,用于版本控制和回滾
    2025-08-08

最新評論

石城县| 克东县| 阿巴嘎旗| 潼关县| 行唐县| 达州市| 黄浦区| 平远县| 连平县| 贺兰县| 龙海市| 贡嘎县| 山丹县| 确山县| 新竹市| 综艺| 怀仁县| 交城县| 靖宇县| 汶川县| 梁平县| 峨眉山市| 吉首市| 四会市| 惠水县| 南澳县| 连江县| 陵川县| 石河子市| 石嘴山市| 开阳县| 衢州市| 寿光市| 襄汾县| 鄢陵县| 溧水县| 吉木萨尔县| 白水县| 灌南县| 泌阳县| 福泉市|