MySQL学习笔记(九)-MySQL存储过程
作者:就叫易易好了
日期:2020/12/01
好处:提高代码的重用性,简化操作
储存过程:
含义:一种预先编译好的SQL语句的集合,理解成批处理语句。
好处:
- 提高了代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
一、创建存储过程
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的SQL语句)
END
注意:
参数列表包含三部分,参数模式,参数名,参数类型
参数模式:
IN:该参数可以作为输入,也就是该参数需要调用
OUT:该参数可以作为输出,也就是该参数可以作为返回值
INOUT:该参数可以作为输入也可以作为输出,
也就是该参数需要传入值,也可以返回值。
举例:
IN stuname VARCHAR(20)
注意事项:
-
如果存储过程体只有一句话,那么BEGIN AND 可以省略。
-
存储过程体中的每条SQL语句的结尾要求必须加分号
-
存储过程的结尾可以使用DELIMITER重新设置
DELIMITER 结束标记
例如:DELEMITER //
二、调用语法
CALL 过程存储名(实参列表)
1、空参列表
#案例:插入到admin表中五条记录(girls数据库中)
在命令提示符里输入以下语句:
DELIMITER //
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,`password`)
VALUES('马保国1','1111'),
('马保国2','2222'),
('马保国3','3333'),
('马保国4','4444'),
('马保国5','5555');
END //
这样的话存储过程就创建好了,然后我们来调用这个存储过程:
CALL myp1()//
显示OK,我们就可以来查看这个存储过程,使用以下语句:
SELECT * FROM ADMIN//
2、创建带IN模式参数的存储过程
#案例:创建存储过程实现 根据女神名,查询对应的男神信息
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id=b.boyfrind_id
WHERE b.name=beautyName;
END //
然后再根据上面类似的方法来调用
3、创建到out模式的存储过程
CREATE PROCEDURE myp34(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//
#调用
CALL myp5('小昭',@bName)//
SELECT @bName//
4、创建带inout模式参数的存储过程
#案例:传入a和b两个值,最终a和b都翻倍并返回
CREATE PROCEDURE myp4(INOUT a INT ,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
#再调用
SET @m=10$
SET @N=20$
CALL myp4(@m,@n)$
SELECT @m,@n$
三、存储过程的删除
语法:DROP PROCEDURE 存储过程名
比如我要删除myp1,可以使用以下语句:
DROP PROCEDURE myp1;
注意,存储过程只能一个一个删除,如果使用
DROP PROCEDURE myp1,myp2,myp3;
会报错~
四、查看存储过程的信息
语法:
SHOW CREATE PROCEDURE 存储名
比如我要查看myp2的存储过程信息,可以使用以下语句:
SHOW REATE PERCEDURE myp2;