2020年6月3日
17:15
类似与java中的方法
好处:
1、提高了代码的重用性
2、简化了操作
#存储过程
含义:可以理解为一组预先编译好的SQL语句的集合,理解成批处理语句
1、提高代码的重用行
2、简化操作
3、减少编译次数并且减少了和数据库的连接次数,提高了效率
一、创建语句
Create procedure 存储过程(参数列表)
Begin
存储过程体(一组合法的SQL语句)
End
注意:
1、参数列表包含三部分
参数模式 参数名 参数类型
举例:
In stuname varchar(20)
参数模式
in:该参数可以作为输入,也就是改参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值又可以返回值
2、如果存储过程也只有一句话,begin end 可以省略
存储过程体中的每句话的结尾必须加分号
存储过程的结尾可以使用delimiter 重新设置
Delimiter ¥
二、调用语法
Call 储存过程名(实参列表);
案例一:空参模式
###插入数据###
Delimiter $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,password)
VALUES('jonn1','0000'),('bober','0000'),('rose','0000'),('jack','0000'),('trumpe','0000');
END $
###调用###
Call myq1()$
注意:新版本字段不再受关键字干扰可以正常输入,没必要再添加单引号作为区分,反而会报错;
修改完结束符后,本次会话都将使用修改完成后的符号作为结束符。
案例二:in输入模式
###创建存储过程是实现根据女神名,查询对应的男神信息###
Delimiter $ ##声明结束符
CREATE PROCEDURE myv2(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 myv2('小昭')$
###创建存储过程,查询是否登录###
CREATE PROCEDURE myv4(IN username VARCHAR(10),IN PASSWORD VARCHAR(10))
BEGIN
DECLARE result INT DEFAULT 0;
SELECT COUNT(*) INTO result # 赋值给局部变量 result
FROM admin a
WHERE a.`username` =username
AND a.`password`=PASSWORD ;
SELECT IF(result>0,'成功','失败') AS '登陆结果';
END$
###调用###
Call myv4('john','8888');
案例3、带out输出模式
###创建存储过程,根据对应的女神名返回男神名###
CREATE PROCEDURE myv5(IN bName VARCHAR(20), OUT gName VARCHAR(20))
BEGIN
SELECT boyName INTO gname
FROM beauty
INNER JOIN boys ON beauty.boyfriend_id = boys.id
WHERE bName = beauty.name;
END$
###调用###
Call ('小昭',@bname)$
Select @bname$
###创建存储过程,根据女神名返回对应的男神名和魅力值###
CREATE PROCEDURE myv6(IN gName VARCHAR(20),OUT bName VARCHAR(20),OUT bucp INT)
BEGIN
SELECT boyName, userCP INTO bName,bucp
FROM beauty b
RIGHT JOIN boys ON boys.id = b.`boyfriend_id`
WHERE gName = b.name;
END$
###调用###
call myv6('小昭',@bname,@bucp)$
select @bname,@bucp$
案例3 inout混合输入输出模式
###输入ab,返回a,b###
CREATE PROCEDURE myv7(INOUT a INT ,INOUT b INT)
BEGIN
SET a= a+20;
SET b= b+20;
END$
###调用###
Set @a =20$
Set @b=20$
Call myv7(@a,@b)$
Select @a,@b$
3、删除存储过程
Drop procedure myv1;
不可同时删除多个存储过程
4、查看存储过程
Show create procedure myv2;