日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

十三、MySQL存储过程相关知识总结 + 案例讲解(强化)

發(fā)布時(shí)間:2024/7/5 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十三、MySQL存储过程相关知识总结 + 案例讲解(强化) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、存儲(chǔ)過程VS函數(shù)

存儲(chǔ)過程和函數(shù):類似于java中的方法
好處:
1、提高代碼的重用性
2、簡化操作

二、存儲(chǔ)過程

含義:一組預(yù)先編譯好的SQL語句的集合,理解成批處理語句

1、提高代碼的重用性
2、簡化操作
3、減少了編譯次數(shù)并且減少了和數(shù)據(jù)庫服務(wù)器的連接次數(shù),提高了效率

(一)創(chuàng)建語法

CREATE PROCEDURE 存儲(chǔ)過程名(參數(shù)列表)
BEGIN
存儲(chǔ)過程體(一組合法的SQL語句)
END

注意

  • 參數(shù)列表包含三部分
    參數(shù)模式 參數(shù)名 參數(shù)類型
    舉例:
    in stuname varchar(20)
  • 參數(shù)模式:
    in:該參數(shù)可以作為輸入,也就是該參數(shù)需要調(diào)用方傳入值
    out:該參數(shù)可以作為輸出,也就是該參數(shù)可以作為返回值
    inout:該參數(shù)既可以作為輸入又可以作為輸出,也就是該參數(shù)既需要傳入值,又可以返回值

  • 如果存儲(chǔ)過程體僅僅只有一句話,begin end可以省略
    存儲(chǔ)過程體中的每條sql語句的結(jié)尾要求必須加分號(hào)
    存儲(chǔ)過程的結(jié)尾可以使用 delimiter 重新設(shè)置
    語法:
    delimiter 結(jié)束標(biāo)記
    案例:
    delimiter $
  • (二)調(diào)用語法

    CALL 存儲(chǔ)過程名(實(shí)參列表);

    案例演示

  • 空參列表
  • # 案例:插入到admin表中五條記錄 SELECT * FROM admin; DELIMITER $ CREATE PROCEDURE myp1() BEGININSERT INTO admin(username,`password`) VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000'); END $ #調(diào)用 CALL myp1()$
  • 創(chuàng)建帶in模式參數(shù)的存儲(chǔ)過程
  • #案例1:創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn) 根據(jù)女神名,查詢對(duì)應(yīng)的男神信息CREATE PROCEDURE myp2(IN beautyName VARCHAR(20)) BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name=beautyName;END $#調(diào)用 CALL myp2('柳巖')$

    案例2 :創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn),用戶是否登錄成功

    CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20)) BEGINDECLARE result INT DEFAULT 0;#聲明并初始化SELECT COUNT(*) INTO result#賦值FROM adminWHERE admin.username = usernameAND admin.password = PASSWORD;SELECT IF(result>0,'成功','失敗');#使用 END $#調(diào)用 CALL myp3('張飛','8888')$

    3.創(chuàng)建out 模式參數(shù)的存儲(chǔ)過程

    #案例1:根據(jù)輸入的女神名,返回對(duì)應(yīng)的男神名CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20)) BEGINSELECT bo.boyname INTO boynameFROM boys boRIGHT JOINbeauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName ;END $#案例2:根據(jù)輸入的女神名,返回對(duì)應(yīng)的男神名和魅力值CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT) BEGINSELECT boys.boyname ,boys.usercp INTO boyname,usercpFROM boys RIGHT JOINbeauty b ON b.boyfriend_id = boys.idWHERE b.name=beautyName ;END $#調(diào)用 CALL myp7('小昭',@name,@cp)$ SELECT @name,@cp$

    4.創(chuàng)建帶inout模式參數(shù)的存儲(chǔ)過程

    #案例1:傳入a和b兩個(gè)值,最終a和b都翻倍并返回CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT) BEGINSET a=a*2;SET b=b*2; END $#調(diào)用 SET @m=10$ SET @n=20$ CALL myp8(@m,@n)$ SELECT @m,@n$
    (三)刪除存儲(chǔ)過程

    語法:drop procedure 存儲(chǔ)過程名
    DROP PROCEDURE p1;
    DROP PROCEDURE p2,p3;#×

    (四)查看存儲(chǔ)過程的信息

    DESC myp2;×
    SHOW CREATE PROCEDURE myp2;

    (五)修改存儲(chǔ)過程(X)

    無法對(duì)存儲(chǔ)過程進(jìn)行修改,只能通過先刪除存儲(chǔ)過程再新增存儲(chǔ)過程的方法來間接實(shí)現(xiàn)修改!

    三、存儲(chǔ)過程案例講解

    #一、創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn)傳入用戶名和密碼,插入到admin表中CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN loginPwd VARCHAR(20)) BEGININSERT INTO admin(admin.username,PASSWORD)VALUES(username,loginpwd); END $ #二、創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn)傳入女神編號(hào),返回女神名稱和女神電話CREATE PROCEDURE test_pro2(IN id INT,OUT NAME VARCHAR(20),OUT phone VARCHAR(20))BEGINSELECT b.name ,b.phone INTO NAME,phoneFROM beauty bWHERE b.id = id;END $ #三、創(chuàng)建存儲(chǔ)存儲(chǔ)過程或函數(shù)實(shí)現(xiàn)傳入兩個(gè)女神生日,返回大小CREATE PROCEDURE test_pro3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT) BEGINSELECT DATEDIFF(birth1,birth2) INTO result; END $ #四、創(chuàng)建存儲(chǔ)過程或函數(shù)實(shí)現(xiàn)傳入一個(gè)日期,格式化成xx年xx月xx日并返回 CREATE PROCEDURE test_pro4(IN mydate DATETIME,OUT strDate VARCHAR(50)) BEGINSELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate; END $CALL test_pro4(NOW(),@str)$ SELECT @str $ #五、創(chuàng)建存儲(chǔ)過程或函數(shù)實(shí)現(xiàn)傳入女神名稱,返回:女神 and 男神 格式的字符串 如 傳入 :小昭 返回: 小昭 AND 張無忌 DROP PROCEDURE test_pro5 $ CREATE PROCEDURE test_pro5(IN beautyName VARCHAR(20),OUT str VARCHAR(50)) BEGINSELECT CONCAT(beautyName,' and ',IFNULL(boyName,'null')) INTO strFROM boys boRIGHT JOIN beauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName; END $CALL test_pro5('柳巖',@str)$ SELECT @str $ #六、創(chuàng)建存儲(chǔ)過程或函數(shù),根據(jù)傳入的條目數(shù)和起始索引,查詢beauty表的記錄 DROP PROCEDURE test_pro6$ CREATE PROCEDURE test_pro6(IN startIndex INT,IN size INT) BEGINSELECT * FROM beauty LIMIT startIndex,size; END $CALL test_pro6(3,5)$

    總結(jié)

    以上是生活随笔為你收集整理的十三、MySQL存储过程相关知识总结 + 案例讲解(强化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。