09_PROCEDURE_FUNCTION
Intro(PROCEDURE) #
类似于java中的方法,MySQL 5.0 版本开始支持存储过程。
含义:一组预先编译好的sql语句的集合,理解成批处理语句。
好处:1).
提高代码的重用性2).
简化操作3).
减少编译次数并且减少了和数据库服务器的连接次数,提高了效率。创建语法 #
Note
注意:
1).
参数列表包含三部分(参数模式,参数名,参数类型),例如:IN stuname varchar(20)
参数模式:
in: 该参数可以作为输入,也就是该参数需要调用方传入值
out: 该参数可以作为输出,也就是该参数可以作为返回值
inout: 该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值2).
如果存储过程体仅仅只有一句话,begin end
可以省略,存储过程体中的每条sql语句的结尾要求必须加分号。存储过程的结尾可以使用delimiter
重新设置。语法:delimiter 结束标记
delimiter $
调用语法 #
call 存储过程(实参列表);
1.空参列表 #
case1:插入到admin表中五条记录
使用下面代码创建存储过程,
然后使用语句call myp1();
进行调用2.(IN)模式列表 #
case1:创建存储过程实现 根据女神名,查询对应的男神信息
使用下面代码创建存储过程,
然后使用语句call myp2('小昭');
进行调用,控制台会展示返回值。case2:创建存储过程实现,用户是否登录成功
使用下面代码创建存储过程,
然后使用语句call myp3('张飞','8888');
进行调用3.(OUT)模式列表 #
case1:根据女神名,返回对应的男神名
使用下面代码创建存储过程,
然后使用语句set @bName; call myp5('小昭', @bName);
进行调用, set 定义可有可无。
可以通过select @bName;
进行查看返回值。case2:根据女神名,返回对应的男神名和男神魅力值
使用下面代码创建存储过程,
然后使用语句call myp6('小昭', @bName, @userCP);
进行调用。
可以通过select @bName,@userCP;
进行查看返回值。4.(INOUT)模式列表 #
case1:传入a和b两个值,最终a和b都翻倍返回
使用下面代码创建存储过程,
然后使用语句set @m = 10; set @n = 20;call myp7(@m, @n);
进行调用
可以通过select @m,@n;
进行查看返回值。
删除语法 #
Note
语法:
drop procedure 存储过程名;
一次只能删除一个。drop procedure myp3;
查看语法 #
Note
语法
desc myp2;
show create procedure myp2;
Intro(FUNCTION) #
类似于java中的方法,
含义:一组预先编译好的sql语句的集合,理解成批处理语句。
好处:1).
提高代码的重用性2).
简化操作3).
减少编译次数并且减少了和数据库服务器的连接次数,提高了效率。 以上与存储过程一致
和存储过程的区别
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新
函数:有且仅有1一个返回,适合做处理数据后返回一个结果