mysql存儲過程使用技巧有哪些

mysql存儲過程使用技巧有:1、創建帶in模式參數的存儲過程;2、創建out模式參數的存儲過程;3、創建帶inout模式參數的存儲過程。

mysql存儲過程使用技巧有哪些

mysql存儲過程使用技巧有:

定義

一組預先編譯好的SQL語句的集合,理解成批處理語句,類似于Java中的方法

1、提高代碼的重用性

2、簡化操作

3、減少了編譯次數并且減少了和數據庫服務器的連接次數,提高了效率

創建語法

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

參數列表包含三部分

參數模式 參數名 參數類型

舉例:

in?stuname?varchar(20)

參數模式:

  • in:該參數可以作為輸入,也就是該參數需要調用方傳入值

  • out:該參數可以作為輸出,也就是該參數可以作為返回值

  • inout:該參數既可以作為輸入又可以作為輸出,也就是該參數既需要傳入值,又可以返回值

  • 如果存儲過程體僅僅只有一句話,begin end可以省略

  • 存儲過程體中的每條sql語句的結尾要求必須加分號。

  • 存儲過程的結尾可以使用 delimiter 重新設置

語法:

delimiter?結束標記

案例:

delimiter?$

調用語法

CALL?存儲過程名(實參列表);

空參列表

插入到admin表中五條記錄

SELECT?*?FROM?admin; DELIMITER?$ CREATE?PROCEDURE?myp1() BEGIN INSERT?INTO?admin(username,`password`)? VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000'); END?$ #調用 CALL?myp1()$

創建帶in模式參數的存儲過程

創建存儲過程實現?根據女神名,查詢對應的男神信息 CREATE?PROCEDURE?myp2(IN?beautyName?VARCHAR(20)) BEGIN SELECT?bo.* FROM?boys?bo RIGHT?JOIN?beauty?b?ON?bo.id?=?b.boyfriend_id WHERE?b.name=beautyName; END?$ #調用 CALL?myp2('柳巖')$

創建存儲過程實現,用戶是否登錄成功

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

創建out 模式參數的存儲過程

根據輸入的女神名,返回對應的男神名

CREATE?PROCEDURE?myp6(IN?beautyName?VARCHAR(20),OUT?boyName?VARCHAR(20)) BEGIN SELECT?bo.boyname?INTO?boyname FROM?boys?bo RIGHT?JOIN beauty?b?ON?b.boyfriend_id?=?bo.id WHERE?b.name=beautyName?; END?$

根據輸入的女神名,返回對應的男神名和魅力值

CREATE?PROCEDURE?myp7(IN?beautyName?VARCHAR(20),OUT?boyName?VARCHAR(20),OUT?usercp?INT)? BEGIN SELECT?boys.boyname?,boys.usercp?INTO?boyname,usercp FROM?boys? RIGHT?JOIN beauty?b?ON?b.boyfriend_id?=?boys.id WHERE?b.name=beautyName?; END?$ #調用 CALL?myp7('小昭',@name,@cp)$ SELECT?@name,@cp$

創建帶inout模式參數的存儲過程

傳入a和b兩個值,最終a和b都翻倍并返回

CREATE?PROCEDURE?myp8(INOUT?a?INT?,INOUT?b?INT) BEGIN SET?a=a*2; SET?b=b*2; END?$ #調用 SET?@m=10$ SET?@n=20$ CALL?myp8(@m,@n)$ SELECT?@m,@n$

刪除存儲過程

drop?procedure?存儲過程名 DROP?PROCEDURE?p1; DROP?PROCEDURE?p2,p3;#×

查看存儲過程的信息

DESC?myp2; SHOW?CREATE?PROCEDURE??myp2;

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享