Mysql存储过程详解

概念

存储过程(Stored Procedure)就是具有名字的一组复杂的SQL语句,经过第一次编译后调用不需要再次编译,用来完成一些特定的功能,可以被调用和传入参数及返回参数

作用

可以封装业务中的sql语句,像函数一样可以被调用,并且支持传参数

优点:

封装sql,隐藏复杂的逻辑
存储过程可以传参和拥有返回值!
批量处理sql!

实现

首先我们需要知道一些概念:
在Mysql中存储过程是需要自定义一个结束符号的,比如原sql结束符号为“;” 但我们需要重新定义一个临时的结束符号来给存储过程使用

修改结束符语法

DELIMITER $

创建存储过程

我们创建存储过程使用的语句是: CREATE PROCEDURE
然后使用begin end 来当做方法体使用,最后加上我们定义的结束符
举例:

无参数

CREATE PROCEDURE cc1()
BEGIN
	INSERT INTO admin a(a.username, a.`password`) VALUES('123456','123456');
END $

这样就完成了一个非常简单的无参数存储过程

参数解释

我们的小括号中需要传递参数比如(【第一个参数使用IN 还是OUT 或者INOUT,具体看下文】 【 第二个参数使用自定义参数名称】 【第三个参数代表这个参数的类型,可直接使用mysql中的类型,比如INT,VARCHAR等】)
例:

IN xxxxx INT

带参数IN

IN关键字代表 入参 学过其他编程语言的应该都清楚,就是我们调方法时候传递的参数
这里我们使用IN关键字传递了两个参数,这两个参数可以在下面直接使用,因为我们在使用存储过程的时候肯定是要定义好参数调用我们这个cc1的时候传递过来的

CREATE PROCEDURE cc2(IN username VARCHAR(20), IN `password` VARCHAR(20))
BEGIN
	INSERT INTO admin(admin.username, admin.`password`) VALUES(username,`password`);
END $

带参数OUT

OUT关键字代表返回值 并且可以返回多个值,比如我们返回了两个值name和phone

#INTO 代表赋值操作,将查询到的数据赋值给返回值对应的参数
CREATE PROCEDURE cc3(IN id INT, OUT `name` VARCHAR(20), OUT phone VARCHAR(20))
BEGIN
	SELECT b.name, b.phone INTO `name`, phone FROM beauty b WHERE b.id = id;
END $

带参数INOUT

INOUT关键字代表既是入参也是返回值
比如:
我们做了一个传入两个参数然后将他们加10后返回的操作:

CREATE PROCEDURE cc4(INOUT a INT,INOUT b INT)
BEGIN
		SET a=a+10;
		set b=b+10;
END $

调用存储过程

那么我们调用存储过程使用的是CALL 关键字

无参数调用

注意:即使没有参数,也需要加小括号

CALL cc1()$

IN参数调用

例:

SET @usname = '123'$
SET @psw = '123456'$
CALL cc2(@usname, @psw)$
#因为我们的cc2这个存储过程有两个参数需要传递,所以我们先设置了两个变量来进行传递

OUT参数调用

例:

SET @id = 1$
CALL cc3(@id,@bname,@bphone)$
SELECT @bname,@bphone$
#因为我们的cc3函数只有一个传入值,然后有两个返回值,所以我们直接将变量定义在调用存储过程的参数里用来接收返回值, 然后使用select语句进行查询

INOUT参数调用

其实INOUT参数调用则和OUT一样
首先设置变量, 然后将变量传入即可

SET @aa = 10$
SET @bb = 20$
CALL cc4(@aa,@bb)$
SELECT @aa,@bb$

删除存储过程

老规矩使用DROP

DROP PROCEDURE cc1$
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值