站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        本篇文章給大家?guī)?lái)了關(guān)于mysql的相關(guān)知識(shí),其中主要介紹了關(guān)于存儲(chǔ)過(guò)程的高級(jí)SQL語(yǔ)句的相關(guān)內(nèi)容,下面一起來(lái)看一下,希望對(duì)大家有幫助。

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        程序員必備接口測(cè)試調(diào)試工具:立即使用
        Apipost = Postman + Swagger + Mock + Jmeter
        Api設(shè)計(jì)、調(diào)試、文檔、自動(dòng)化測(cè)試工具
        后端、前端、測(cè)試,同時(shí)在線協(xié)作,內(nèi)容實(shí)時(shí)同步

        推薦學(xué)習(xí):mysql視頻教程

        MySQL高級(jí)SQL語(yǔ)句(存儲(chǔ)過(guò)程)

        一、存儲(chǔ)過(guò)程的概述

        1.1 什么是存儲(chǔ)過(guò)程

        存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集合。
        存儲(chǔ)過(guò)程在使用過(guò)程中是將常用或者復(fù)雜的工作預(yù)先使用SQL語(yǔ)句寫(xiě)好并用一個(gè)指定的名稱存儲(chǔ)起來(lái),這個(gè)過(guò)程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中。當(dāng)需要使用該存儲(chǔ)過(guò)程時(shí),只需要調(diào)用它即可。存儲(chǔ)過(guò)程在執(zhí)行上比傳統(tǒng)SQL速度更快、執(zhí)行效率更高。

        1.2 存儲(chǔ)過(guò)程的有點(diǎn)

        1. 執(zhí)行一次后,會(huì)將生成的二進(jìn)制代碼駐留緩沖區(qū),提高執(zhí)行效率。
        2. SQL語(yǔ)句加上控制語(yǔ)句的集合,靈活性高。
        3. 在服務(wù)器端存儲(chǔ),客戶端調(diào)用時(shí),降低網(wǎng)絡(luò)負(fù)載。
        4. 可多次重復(fù)被調(diào)用,可隨時(shí)修改,不影響客戶端調(diào)用。
        5. 可完成所有的數(shù)據(jù)庫(kù)操作,也可控制數(shù)據(jù)庫(kù)的信息訪問(wèn)權(quán)限。

        二、創(chuàng)建、調(diào)用和查看存儲(chǔ)過(guò)程

        2.1 創(chuàng)建存儲(chǔ)過(guò)程

        delimiter $$                 #將語(yǔ)句的結(jié)束符號(hào)從分號(hào);臨時(shí)改為兩個(gè)$$(可以自定義) create procedure proc ()     #創(chuàng)建存儲(chǔ)過(guò)程,過(guò)程名為proc,不帶參數(shù) -> begin                     #過(guò)程體以關(guān)鍵字begin開(kāi)始 -> select * from store_info; #過(guò)程體語(yǔ)句 -> end $$                    #過(guò)程體以關(guān)鍵字end結(jié)束  delimiter ;                   #將語(yǔ)句的結(jié)束符號(hào)恢復(fù)為分號(hào)
        登錄后復(fù)制

        示例:

        delimiter $$create procedure proc01 ()-> bengin -> create table student(id int,name char(10),age int);-> insert into student values(1,'zhangsan',18);-> insert into student values(2,'lisi',18);-> select * from student;-> end $$delimiter ;
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        2.2 調(diào)用和查看存儲(chǔ)過(guò)程

        call proc;               #調(diào)用存儲(chǔ)過(guò)程    show create procedure [數(shù)據(jù)庫(kù).]存儲(chǔ)過(guò)程名;  #查看某個(gè)存儲(chǔ)過(guò)程的具體信息  show create procedure proc; show create procedure procG  show procedure status [like '%proc%'] G
        登錄后復(fù)制

        示例:

        call proc01;      show create procedure proc01;  show create procedure proc01G       #查看存儲(chǔ)過(guò)程的具體信息    show procedure status like '%Proc01%'G
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)
        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)
        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        2.3 刪除存儲(chǔ)過(guò)程

         #存儲(chǔ)過(guò)程內(nèi)容的修改方法是通過(guò)刪除原有存儲(chǔ)過(guò)程,之后再以相同的名稱創(chuàng)建新的存儲(chǔ)過(guò)程。 drop procedure if exists proc;  #僅當(dāng)存在時(shí)刪除,不添加If EXISTS 時(shí),如果指定的過(guò)程不存在,則產(chǎn)生一個(gè)錯(cuò)誤。
        登錄后復(fù)制

        示例:

        drop procedure if exists proc01;
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        三、存儲(chǔ)過(guò)程的參數(shù)

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

        注意:變量名不能含有下劃線。

        delimiter $$create procedure proc2(in stuname char(20))  #參數(shù)為stuname,數(shù)據(jù)類型一定要與下面的where語(yǔ)句后字段的數(shù)據(jù)類型相同-> begin -> select * from student where name = stuname;-> end $$delimiter ;call proc2('zhangsan');       #調(diào)用存儲(chǔ)過(guò)程,并傳入?yún)?shù)‘zhangsan’
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        四、存儲(chǔ)過(guò)程的控制語(yǔ)句

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        4.1 條件語(yǔ)句 :if-then-else … end if

         delimiter $$    create procedure proc03(in innum int)   #創(chuàng)建存儲(chǔ)過(guò)程proc03,參數(shù)為innum,類型為int   -> begin   -> declare var int;         #定義變量var為int類型   -> set var=innum*2;         #變量var的值等于傳入的參數(shù)值乘2  -> if var>=10 then          #當(dāng)var的值大于10時(shí),id值會(huì)加1,否則減1  -> update ss set id=id+1;    -> else   -> update ss set id=id-1;    -> end if;    -> end $$     delimiter ;    call proc03(8);    #調(diào)用存儲(chǔ)過(guò)程,并傳入?yún)?shù)8    call proc03(3);    #調(diào)用存儲(chǔ)過(guò)程,并傳入?yún)?shù)3
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        4.2 循環(huán)語(yǔ)句 :while ···· end while

         delimiter $$                   #修改默認(rèn)結(jié)束符為$$  create procedure proc05()      #創(chuàng)建存儲(chǔ)過(guò)程proc04  -> begin                       #過(guò)程體以關(guān)鍵字begin開(kāi)始  -> declare var int(10);        #定義變量var為int類型  -> set var=0;                  #var的起始值為0  -> while var<6 do              #使用while循環(huán),當(dāng)var值小于6時(shí)滿足條件,則向表中插入var的值  -> insert into ss values(var);    -> set var=var+1;              #每次循環(huán)后var值自增1  -> end while;                  #結(jié)束while循環(huán)  -> end $$                      #創(chuàng)建存儲(chǔ)過(guò)程結(jié)束    delimiter ;                    #重新修改默認(rèn)結(jié)束符為原始的;    call proc05;                   #調(diào)用存儲(chǔ)過(guò)程proc04
        登錄后復(fù)制

        MySQL存儲(chǔ)過(guò)程高級(jí)SQL語(yǔ)句總結(jié)

        推薦學(xué)習(xí):mysql視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 欧美精品免费在线| 最新国产精品亚洲| 亚洲国产精品视频| 国产亚洲福利精品一区| 久久久91人妻无码精品蜜桃HD | 欧美国产亚洲精品高清不卡| 无码国产精品一区二区免费vr | 欧美亚洲综合免费精品高清在线观看| 国产精品九九九久久九九| 亚洲国产精品13p| 精品免费久久久久国产一区 | 国产一精品一av一免费爽爽| 无码囯产精品一区二区免费| 久久精品无码专区免费| 国产成人精品免费视频大全| 国产精品怡红院永久免费| 精品亚洲aⅴ在线观看| 中文字幕精品亚洲无线码一区应用| 国产一区二区精品尤物| 91精品国产高清久久久久久国产嫩草| 国产精品青草久久久久婷婷| 国产精品视频一区二区三区无码| 日本午夜精品一区二区三区电影| 亚洲国产精品嫩草影院在线观看| 亚洲精品欧美精品日韩精品 | 精品久久久无码中文字幕| 国产精品无码不卡一区二区三区| 亚洲午夜精品久久久久久人妖| 精品国产福利第一区二区三区| 2022国产精品福利在线观看| 国产精品无码午夜福利| 国产精品jizz视频| 国产精品美女久久久m| 国产suv精品一区二区33| 成人无码精品1区2区3区免费看| 国产精品天干天干综合网| 福利姬在线精品观看| 四虎精品成人免费永久| 国产成人精品久久综合| 久久er国产精品免费观看8| 日本加勒比久久精品|