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() $
案例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’)$
案例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 存儲名