MYSQL存儲過程

存儲過程

好處

1.提升代碼的重用性數據庫

2.簡化操做服務器

3.減小了編譯次數而且減小了和數據庫服務器鏈接次數,提升了效率markdown

含義

一組預先編譯好的SQL語句的集合,理解成批處理語句ide

建立語法

CREATE PROCEDURE 存儲過程名(參數列表)code

BEGINit

​ 存儲過程體(一組合法的SQL語句)編譯

ENDclass

注意:效率

參數列表包含三個部分登錄

參數模式 參數名 參數類型

舉例

IN stuname VARCHAR(20);

參數模式

IN : 該參數能夠做爲輸入,須要調用方傳入值

OUT : 該參數能夠做爲輸出,也就是該參數能夠做爲返回值

INOUT : 該參數既能夠做爲輸入又能夠做爲輸出,也就是該參數既須要傳入值,又能夠返回值

2.若是存儲過程體只有一個話,BEGIN END 能夠省略,存儲過程體中每條SQL語句的結尾要求必須加分號

存儲過程的結尾能夠使用DELIMITER 從新設置

語法

DELIMITER 結束標記

案例

DELIMITER $

調用語法

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

空參列表

案例:插入到admin表中五條記錄

DELIMITER $

CREATE PROCEDURE myp1()

BEGIN

INSERT INTO admin(username,password)

values(‘john1’,‘0001’),(‘john1’,‘0001’),(‘john1’,‘0001’),(‘john1’,‘0001’),(‘john1’,‘0001’)

END $

調用

CALL myp1() $

帶in模式參數的存儲過程

案例1:建立存儲過程實現,根據女神名,查詢對應的男神信息

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(‘hello’) $

案例2: 建立存儲過程,實現用戶是否登陸成功

CREATE PROCEDURE myp3(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模式的存儲過程

案例1:根據女神名,返回對應的男神名

CREATE PROCEDURE myp5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))

BEGIN

SELECT bo.boyName INTO boyName

FROM boys bo

INNER JOIN beauty b ON bo.id=b.boyfriend_id

WHERE b.name=beautyName

END $

調用

SET @bName$

CALL myp5(‘小昭’,@bName) $

SELECT @bName$

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

案例1:摻入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 存儲過程名;

查看存儲過程的信息

語法

SHOW CREATE PROCEDURE 存儲名

相關文章
相關標籤/搜索