概念
存储过程(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$