MySQL——存储过程

存储过程

一组预先编译好的sql语句集合,理解成批处理语句

  1. 创建语法
create procedure 存储过程名(参数列表)
begin
		存储过程体(一组合法的SQL语句)
end;

说明:

  • 参数列表包含三个部分:参数模式 参数名 参数类型
    举例:IN stuname VARCHAR(20)
  • 参数模式:
    IN:该参数可以作为输入,也就是需要调用方法传入值
    OUT:该参数可作为输出,也就是可作为返回值
    INOUT:该参数既可以做输出,也可以做输入
  • 若存储体只有一句话,那么begin和end可以省略
  • 存储过程体中的每条SQL语句必须添加分号。存储过程的结尾可以使用delimiter重新设置。原因在于
    语法:DELIMITER 结束标记(如:$,!之类的标记)
  • 注意这些操作MySQL不支持,只能在命令提示符上写
  1. 调用语法
    调用只是执行了存储过程内的语法,并不会得到输出,如果需要输出还要用select进行查看
call 存储过程名(实参列表);

空参的存储过程

例:往admin表中插入三行数据

#创建存储过程
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
	INSERT INTO admin(username ,`password`)
	VALUES('john1','0000'),('lily','0001),('rose','0002');
END $
#调用存储过程,此时才会真正插入数据
CALL myp1()$
#查看数据
SELECT * FROM admin $

上述例子易看出,一旦设置了终止符,后面的命令都要用该符号结尾

带in模式的存储过程

  • in模式不是没有输出,它的输出就是存储过程内部语法的执行结果,如果执行结果有输出,如select某些记录,则输出就是这些记录

例:创建存储过程实现 用户是否登陆成功(密码用户名是否匹配admin表中已有数据)

#创建存储过程
CREATE PROCEDURE myp2(IN username VARCHAR(20), IN PASSWORD VARCHAR(20))
BEGIN
	DECLARE result VARCHAR(20) DEFAULT ''; #声明初始化
	SELECT COUNT(*) INTO result
	FROM admin
	WHERE admin.`username`=username
	AND admin.`password`=PASSWORD;
	SELECT IF(result>0,'成功','失败'); #使用
END $
#调用存储过程
CALL myp2('张飞','00998') $
  • IN后面的就是局部变量

带OUT模式的存储过程

例:根据女生名(beauty表),返回对应男生名(boys表)

#创建存储过程
CREATE PROCEDURE myp4(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 $

#调用时,OUT的变量不需要赋值
CALL myp4('王语嫣',@bName)$ #调用存储过程,@bName是一个用户变量
SELECT @bName $                   #查询对应男生名字
  • 注意最后会自动输出OUT,要记得把查出来的值赋值给输出,即select…into…

创建带INOUT模式的存储过程

例:传入a, b两个值,最终a,b均翻倍并返回

#创建存储过程
CREATE PROCEDURE myp5(INOUT a INT, INOUT b INT)
BEGIN 
	SET a=a*2;
	SET b=b*2; #局部变量
END $

#创建用户变量并初始化赋值
SET @m=10$
SET @n=20$

#调用存储过程
CALL myp5(@m,@n)$
#查看最终结果
SELECT @m,@n$

删除存储过程

  • 一次只能删除一个
  • 语法:drop procedure 存储过程名;

查看存储过程的信息

  • 语法:show create procedure 存储过程名;
  • 不可以修改存储过程的语句,只能删除重建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值