一、存储过程
含义:一组预先编译好的sql语句集合。
好处:减少编译次数并减少了数据库服务器连接次数,提高了效率。
语法:
- 创建语法
CREATE PROCEDURE 存储过程名(参数列表)
Begin
存储过程体(一组合法的sql语句)
End;
注意:
①参数列表包含三部分
参数模式 参数名 参数类型
举例:
IN stuname VARCHAR(20)
参数模式:
IN:该参数可以作为输入,也就是该参数需要调用方传入值
OUT:该参数可以作为输出,也就是该参数可以作为返回值
INOUT:该参数既可以作为输入也可以作为输出,也就是该参数既需要传入值,又可以返回值
②如果存储过程体仅仅只有一句话,begin end可以省略
存储过程中的每条sql语句结尾要求必须加分号
在命令页面需要设置DELIMITER
存储过程的结尾可以使用 DELIMITER 重新设置
语法:DELIMITER 结束标记
例: DELIMITER $
- 调用语法
语法:Call 存储过程名(实参列表);
IN参数案例1:有admin一张表,表中有username、password两个字段
需求:创建存储过程实现,用户是否登录成功
第一步创建:
CREATE PROCEDURE wzx(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE xxx INT DEFAULT 0; #声明:自定义局部变量xxx并初始化
Select count(*)into xxx #赋值:使用select语法给xxx变量赋值
From admin
Where admin.username = username
And admin.password = PASSWORD; #注意:字段名和参数相同时候,字段名前加表名
Select IF(xxx>0,’成功’,’失败’); #使用:输出xxx内容
END $
第二步:调用
CALL wzx(‘张三’,‘666666’)$
单个OUT参数案例1:有beauty女神表和boys男生表
需求:根据beauty表中名字,返回对应的boys表中的名字
第一步创建:
CREATE PROCEDURE wzx(IN beautyname varchar(20),OUT boyname varchar(20))
BEGIN
Select T1.NAME into boyname #查询出name插入到out参数中
From boys T1
INNER join beauty T2 ON T1.ID = T2.boyfriend_ID
WHERE T2.NAME=beautyname
END $
第二步调用:
CALL wzx(‘柳岩’,@bname)$ #out参数需要声明一个自定义全局变量
Select @bname$ #使用变量,查询出数据
多个OUT参数案例2:有beauty女神表和boys男生表
需求:根据beauty表中名字,返回对应的boys表中的名字和魅力值
第一步创建:
CREATE PROCEDURE wzx(IN beautyname varchar(20),OUT boyname varchar(20),OUT userCP VARCHAR(20))
BEGIN
Select T1.NAME,T1.userCP into boyname,userCP
From boys T1
INNER join beauty T2 ON T1.ID = T2.boyfriend_ID
WHERE T2.NAME=beautyname
END $
第二步调用:
CALL wzx(‘柳岩’,@bname,@ucp)$
Select @bname,@ucp
INOUT参数案例1
需求:传入a和b两个值,最终a和b都翻倍并返回
第一步创建:
CREATE PROCEDURE wzx(inout a int , inout b int)
BEGIN
Set a=a*2;
Set b=b*2;
END $
第二步调用:
Set @m=10$
Set @n=8$
Call wzx(@m,@n)$
Select @m,@n$