mysql存储过程入门_MySQL入门之存储过程
1 什么是存儲過程
存儲過程,帶有邏輯的sql語句
之前的sql沒有條件判斷,沒有循環(huán)
存儲過程帶上流程控制語句(if while)
2 存儲過程特點
1)執(zhí)行效率非???#xff01;存儲過程是在數(shù)據(jù)庫的服務(wù)器端執(zhí)行的!!!
2)移植性很差!不同數(shù)據(jù)庫的存儲過程是不能移植。
3 存儲過程語法
-- 創(chuàng)建存儲過程
DELIMITER $ -- 聲明存儲過程的結(jié)束符
CREATE PROCEDURE pro_test() --存儲過程名稱(參數(shù)列表)
BEGIN -- 開始
-- 可以寫多個sql語句; -- sql語句+流程控制
SELECT * FROM employee;
END $ -- 結(jié)束 結(jié)束符
-- 執(zhí)行存儲過程
CALL pro_test(); -- CALL 存儲過程名稱(參數(shù));
參數(shù):
IN: 表示輸入?yún)?shù),可以攜帶數(shù)據(jù)帶存儲過程中
OUT: 表示輸出參數(shù),可以從存儲過程中返回結(jié)果
INOUT: 表示輸入輸出參數(shù),既可以輸入功能,也可以輸出功能
**************三、存儲過程*******************-
-- 聲明結(jié)束符
-- 創(chuàng)建存儲過程
DELIMITER $
CREATE PROCEDURE pro_test()
BEGIN
-- 可以寫多個sql語句;
SELECT * FROM employee;
END $
-- 執(zhí)行存儲過程
CALL pro_test();
-- 刪除存儲過程
DROP PROCEDURE pro_test();
-- 3.1 帶有輸入?yún)?shù)的存儲過程
-- 需求:傳入一個員工的id,查詢員工信息
CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 輸入?yún)?shù)
BEGIN
SELECT * FROM employee WHERE id=eid;
END $
-- 調(diào)用
CALL pro_findById(4);
-- 3.2 帶有輸出參數(shù)的存儲過程
CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) -- OUT:輸出參數(shù)
BEGIN
-- 給參數(shù)賦值
SET str='這是一個存儲過程';
END $
3.3 帶有輸入輸出參數(shù)的存儲過程
CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 輸入輸出參數(shù)
BEGIN
-- 查看變量
SELECT n;
SET n =500;
END $
-- 調(diào)用
SET @n=10;
CALL pro_testInOut(@n);
SELECT @n;
3.4 帶有條件判斷的存儲過程
-- 需求:輸入一個整數(shù),如果1,則返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他數(shù)字,返回“錯誤輸入”;
DELIMITER $
CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str='星期一';
ELSEIF num=2 THEN
SET str='星期二';
ELSEIF num=3 THEN
SET str='星期三';
ELSE
SET str='輸入錯誤';
END IF;
END $
CALL pro_testIf(4,@str);
SELECT @str;
3.5 帶有循環(huán)功能的存儲過程
-- 需求: 輸入一個整數(shù),求和。例如,輸入100,統(tǒng)計1-100的和
DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
BEGIN
-- 定義一個局部變量
DECLARE i INT DEFAULT 1;
DECLARE vsum INT DEFAULT 0;
WHILE i<=num DO
SET vsum = vsum+i;
SET i=i+1;
END WHILE;
SET result=vsum;
END $
DROP PROCEDURE pro_testWhile;
CALL pro_testWhile(100,@result);
SELECT @result;
3.6 使用查詢的結(jié)果賦值給變量(INTO)
DELIMITER $
CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )
BEGIN
SELECT empName INTO vname FROM employee WHERE id=eid;
END $
CALL pro_findById2(1,@NAME);
SELECT @NAME;
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程入门_MySQL入门之存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何安装mysql5.7.9_安装mys
- 下一篇: linux cmake编译源码,linu