一、存储过程
1、概念
1.1、含义
相当于Java中的方法
1.2、优点
- 减少了编译次数,减少了和数据库服务器的连接次数,提高了效率
- 提高代码的重用性
二、语法
2.1、创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的SQL语句)
end
注意:
- 参数列表包含三部分
- 参数模式
- 参数名
- 参数类型
- 举例:IN stuname varchar(20)
- 参数模式:
- IN:该参数可以作为输入,也就说需要调用方传入值
- OUT:该参数可以作为输出,也就是返回值
- INOUT:既可以作为输入,也可以作为输出
- 如果存储过程体仅仅只有一句话,begin ,end可以省略
- 存储过程中的每条SQL语句的结尾,要求必须加分号
- 存储过程的结尾可以使用 delimiter 重新设置 语法:delimiter $
2.1.1、空参
create procedure myp1()
begin
select * from student s where s.sid = 1;
end $
2.1.2、输入参数
DELIMITER $
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 $
2.1.3、多输入参数
CREATE PROCEDURE myp4(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 $
2.1.4、带输出参数
#根据输入的女生名,返回其男朋友名
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 $
DROP PROCEDURE myp5;
#调用
CALL myp5('小昭',@bName);
SELECT @bName;
2.1.5、INOUT参数
#需求:传入两个参数,使值翻倍并返回
CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)
BEGIN
SET a = a * 2;
SET b = b * 2;
END $
#设置局部变量
SET @a = 10;
SET @b = 20;
CALL myp6(@a,@b);
SELECT @a,@b;
2.2、调用语法
call 存储过程名(实参列表)$
三、查看、删除
3.1、查看
show create procedure xxx(存储过程名)
3.2、删除
drop procedure xxx
3.2、修改
不能修改过程体,只能删除重建