1.含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
(1)提高代碼的重用性
(2)簡化操作
(3)減少了編譯次數並且減少了和數據庫服務器的連接次數,提高了效率
2.創建語法
CREATE PROCEDURE 存儲過程名(參數列表)
BEGIN
存儲過程體(一組合法的SQL語句)
END
3.語法詳解
(1)參數列表包含三部分
參數模式 參數名 參數類型
舉例:
in name varchar(20)
(2)參數列表中的參數模式
in:該參數可以作爲輸入,也就是該參數需要調用方傳入值
out:該參數可以作爲輸出,也就是該參數可以作爲返回值
inout:該參數既可以作爲輸入又可以作爲輸出,也就是該參數既需要傳入值,又可以返回值
(3)注意事項
如果存儲過程體僅僅只有一句話,begin end可以省略
存儲過程體中的每條sql語句的結尾要求必須加分號。
存儲過程的結尾可以使用 delimiter 重新設置
語法:
delimiter 結束標記
案例:
delimiter $
4.調用語法
CALL 存儲過程名(實參列表);
5.案例演示
(1)空參列表
案例:插入到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()$
(2)創建帶in模式參數的存儲過程
案例1:創建存儲過程實現,用戶是否登錄成功
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')$
(3)創建out 模式參數的存儲過程
案例1:根據輸入的女神名,返回對應的男神名和魅力值
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$
(4)創建帶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$
6.刪除存儲過程
語法:drop procedure 存儲過程名
DROP PROCEDURE p1;
DROP PROCEDURE p2,p3(錯誤寫法,不能查看多個)
7.查看存儲過程的信息
DESC myp2;(錯誤寫法)
SHOW CREATE PROCEDURE myp2;