MySQL存儲過程使用解析
mysql存儲過程
存儲過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲復(fù)雜程序,以便外部程序調(diào)用的一種數(shù)據(jù)庫對象。目的是為了完成特定功能的SQL語句集,經(jīng)編譯創(chuàng)建并保存在數(shù)據(jù)庫中,用戶可通過指定存儲過程的名字并給定參數(shù)(需要時)來調(diào)用執(zhí)行。說白了就是數(shù)據(jù)庫 SQL語言層面的代碼封裝與重用。創(chuàng)建的存儲過程通常保存在數(shù)據(jù)庫的數(shù)據(jù)字典中。
1.創(chuàng)建存儲過程
- create procedure 存儲過程名(參數(shù)列表)
- begin
- 存儲過程體(一組合法的sql語句)
- end
參數(shù)列表包含3個部分:
- 參數(shù)模式 參數(shù)名 參數(shù)類型。
- 舉例:IN userid varchar(20)
- 參數(shù)模式有3個:
- in:傳入接收
- out:輸出,作為返回值
- inout:既可以作為輸入,也可作為輸出
begin ... end 使用:
- 如果存儲過程體僅有一句話,begin end 可以不寫
- 存儲過程的每條sql語句結(jié)尾必須加分號結(jié)束
- 存儲過程的結(jié)尾使用delimiter重新設(shè)置
- delimiter $
- ...
- $
2.調(diào)用存儲過程語法
CALL 存儲過程名(參數(shù)列表)
3.創(chuàng)建和調(diào)用案例解析
①.空參數(shù)列表
- # 空參數(shù)存儲過程案例
- # 創(chuàng)建存儲過程
- DELIMITER $ #修改存儲過程的結(jié)束標(biāo)識符號
- CREATE PROCEDURE myP1()
- BEGIN
- insert into demo01
- (id,name,age,sex)
- values
- (10011,"jalen",27,1),
- (10021,"xiar",26,1),
- (10031,"heli",24,0),
- (10041,"weiwei",28,1);
- END $
- DELIMITER ; #把結(jié)束標(biāo)識改回去
- # 調(diào)用存儲過程
- CALL myP1();
- # 查看表結(jié)果
- select * from demo01;
②.in模式參數(shù)的存儲過程
輸入單個參數(shù)的存儲過程
- # 2.1 in模式參數(shù)的存儲過程,輸入單個參數(shù)
- # 創(chuàng)建存儲過程
- DELIMITER $
- CREATE PROCEDURE myP2(IN InName varchar(20) )
- BEGIN
- SELECT * from demo01 where name = InName;
- END $
- DELIMITER ; #把結(jié)束標(biāo)識改回去
- # 調(diào)用存儲過程
- CALL myP2("jalen") ;
輸入多個個參數(shù)的存儲過程
- # 2.2 in模式參數(shù)的存儲過程,輸入多個參數(shù)
- # 創(chuàng)建存儲過程
- DELIMITER $
- CREATE PROCEDURE myP3(IN InAge int ,IN InSex int )
- BEGIN
- DECLARE res varchar(20) default ""; # 申明一個局部變量res
- SELECT name into res # 賦值
- FROM demo01
- WHERE age = InAge AND sex = InSex;
- SELECT res; #使用局部變量
- END $
- DELIMITER ;
- # 調(diào)用存儲過程
- CALL myP3(27,1);
③.out模式參數(shù)的存儲過程
- # 3.out模式參數(shù)的存儲過程
- #創(chuàng)建存儲過程
- delimiter $ #修改存儲過程的結(jié)束標(biāo)識
- CREATE PROCEDURE myP4(IN name varchar(20), out age int, out sex int)
- BEGIN
- select
- demo01.age,demo01.sex into age,sex
- from
- demo01
- where demo01.name = name;
- END $
- DELIMITER ;
- #調(diào)用
- CALL myP4("jalen",@age,@sex);
- select @age,@sex;
④.inout模式參數(shù)的存儲過程
- # 4.inout模式參數(shù)的存儲過程
- #創(chuàng)建存儲過程
- delimiter $ #修改存儲過程的結(jié)束標(biāo)識
- CREATE PROCEDURE myP5(inout m int ,inout n int)
- BEGIN
- set m := m+10;
- set n := n+10;
- END $
- DELIMITER ;#改回原有的結(jié)束標(biāo)識分號
- # 調(diào)用
- set @a := 5,@b :=10;
- CALL myP5(@a,@b);
- select @a,@b;
4.刪除存儲過程
- 語法:drop procedure 存儲過程名稱
- 注意:一次只能刪除一個存儲過程
- 案例:drop procedure myP1;
5.查看存儲過程的信息
- show create procedure 存儲名;